예제 #1
0
        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);
        }