public bool TryRepairPrinter(IEnumerable <string> printerNames) { Logger.Error("It looks like the printers are broken. This needs to be fixed to allow PDFCreator to work properly"); var title = _translation.RepairPrinterNoPrintersInstalled; var message = _translation.RepairPrinterAskUserUac; Logger.Debug("Asking to start repair.."); var response = ShowMessage(message, title, MessageOptions.YesNo, MessageIcon.Exclamation); if (response == MessageResponse.Yes) { var applicationPath = _assemblyHelper.GetAssemblyDirectory(); var printerHelperPath = _pathSafe.Combine(applicationPath, "PrinterHelper.exe"); if (!_file.Exists(printerHelperPath)) { Logger.Error("PrinterHelper.exe does not exist!"); title = _translation.Error; message = _translation.GetSetupFileMissingMessage(_pathSafe.GetFileName(printerHelperPath)); ShowMessage(message, title, MessageOptions.OK, MessageIcon.Error); return(false); } Logger.Debug("Reinstalling Printers..."); var pdfcreatorPath = _nameProvider.GetPortApplicationPath(); var printerNameString = GetPrinterNameString(printerNames); var installParams = $"/RepairPrinter {printerNameString} /PortApplication \"{pdfcreatorPath}\""; var installResult = _shellExecuteHelper.RunAsAdmin(printerHelperPath, installParams); Logger.Debug("Done: {0}", installResult); } Logger.Debug("Now we'll check again, if the printer is installed"); if (IsRepairRequired()) { Logger.Warn("The printer could not be repaired."); return(false); } Logger.Info("The printer was repaired successfully"); return(true); }
public void Setup() { var exeName = "PDFCreator.exe"; _assemblyFolder = @"X:\Programs\My Folder"; _pdfcreatorPath = Path.Combine(_assemblyFolder, exeName); _printerHelperPath = Path.Combine(_assemblyFolder, "PrinterHelper.exe"); _assemblyHelper = Substitute.For <IAssemblyHelper>(); _assemblyHelper.GetPdfforgeAssemblyDirectory().Returns(_assemblyFolder); _interactionInvoker = Substitute.For <IInteractionInvoker>(); _printerHelper = Substitute.For <IPrinterHelper>(); _shellExecuteHelper = Substitute.For <IShellExecuteHelper>(); _file = Substitute.For <IFile>(); _nameProvider = Substitute.For <IPDFCreatorNameProvider>(); _nameProvider.GetExeName().Returns(exeName); _nameProvider.GetExePath().Returns(_pdfcreatorPath); _nameProvider.GetPortApplicationPath().Returns(_pdfcreatorPath); }