Ejemplo n.º 1
0
        public static ActionResult CheckIfPrinterNotInstalled(Session session)
        {
            ActionResult resultCode;
            SessionLogWriterTraceListener installTraceListener = new SessionLogWriterTraceListener(session);
            PdfScribeInstaller            installer            = new PdfScribeInstaller();

            installer.AddTraceListener(installTraceListener);
            try
            {
                if (installer.IsPdfScribePrinterInstalled())
                {
                    resultCode = ActionResult.Success;
                }
                else
                {
                    resultCode = ActionResult.Failure;
                }
            }
            finally
            {
                if (installTraceListener != null)
                {
                    installTraceListener.Dispose();
                }
            }

            return(resultCode);
        }
Ejemplo n.º 2
0
        public static ActionResult UninstallPdfScribePrinter(Session session)
        {
            ActionResult printerUninstalled;

            SessionLogWriterTraceListener installTraceListener = new SessionLogWriterTraceListener(session);

            installTraceListener.TraceOutputOptions = TraceOptions.DateTime;

            PdfScribeInstaller installer = new PdfScribeInstaller();

            installer.AddTraceListener(installTraceListener);
            try
            {
                if (installer.UninstallPdfScribePrinter())
                {
                    printerUninstalled = ActionResult.Success;
                }
                else
                {
                    printerUninstalled = ActionResult.Failure;
                }
                installTraceListener.CloseAndWriteLog();
            }
            finally
            {
                if (installTraceListener != null)
                {
                    installTraceListener.Dispose();
                }
            }
            return(printerUninstalled);
        }
Ejemplo n.º 3
0
        private void DoUninstall()
        {
            // enable the line below to debug this installer; disable otherwise
            //MessageBox.Show("Attach the .NET debugger to the 'MSI Debug' msiexec.exe process now for debug. Click OK when ready...", "MSI Debug");

            Context.LogMessage("Uninstalling Myrtille.Services");

            try
            {
                var process = new Process();

                bool debug = true;

                #if !DEBUG
                debug = false;
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                #endif

                process.StartInfo.FileName  = string.Format(@"{0}\WindowsPowerShell\v1.0\powershell.exe", Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess ? Environment.SystemDirectory.ToLower().Replace("system32", "sysnative") : Environment.SystemDirectory);
                process.StartInfo.Arguments = "-ExecutionPolicy Bypass" +
                                              " -Command \"& '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.Uninstall.ps1") + "'" +
                                              " -DebugMode " + (debug ? "1" : "0") +
                                              " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Uninstall.log") + "'" + "\"";

                process.Start();
                process.WaitForExit();
                if (process.ExitCode != 0)
                {
                    throw new Exception(string.Format("An error occured while running {0}. See {1} for more information.",
                                                      Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.Uninstall.ps1"),
                                                      Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Uninstall.log")));
                }

                // uninstall Myrtille PDF printer, if exists
                var scribeInstaller = new PdfScribeInstaller(Context);
                scribeInstaller.UninstallPdfScribePrinter();

                Context.LogMessage("Uninstalled Myrtille.Services");
            }
            catch (Exception exc)
            {
                // in case of any error, don't rethrow the exception or myrtille won't be uninstalled otherwise (rollback action)
                // if myrtille can't be uninstalled, it can't be re-installed either! (at least, with an installer of the same product code)
                Context.LogMessage(string.Format("Failed to uninstall Myrtille.Services ({0})", exc));
            }
        }
Ejemplo n.º 4
0
        private void DoUninstall()
        {
            // enable the line below to debug this installer; disable otherwise
            //MessageBox.Show("Attach the .NET debugger to the 'MSI Debug' msiexec.exe process now for debug. Click OK when ready...", "MSI Debug");

            Context.LogMessage("Uninstalling Myrtille.Services");

            try
            {
                // uninstall Myrtille PDF printer
                var scribeInstaller = new PdfScribeInstaller(Context);
                scribeInstaller.UninstallPdfScribePrinter();
            }
            catch (Exception exc)
            {
                Context.LogMessage(string.Format("Failed to uninstall Myrtille.Services ({0})", exc));
                throw;
            }
        }
Ejemplo n.º 5
0
        public static ActionResult InstallPdfScribePrinter(Session session)
        {
            ActionResult printerInstalled;

            String driverSourceDirectory  = session.CustomActionData["DriverSourceDirectory"];
            String outputCommand          = session.CustomActionData["OutputCommand"];
            String outputCommandArguments = session.CustomActionData["OutputCommandArguments"];

            SessionLogWriterTraceListener installTraceListener = new SessionLogWriterTraceListener(session);

            installTraceListener.TraceOutputOptions = TraceOptions.DateTime;

            PdfScribeInstaller installer = new PdfScribeInstaller();

            installer.AddTraceListener(installTraceListener);
            try
            {
                if (installer.InstallPdfScribePrinter(driverSourceDirectory,
                                                      outputCommand,
                                                      outputCommandArguments))
                {
                    printerInstalled = ActionResult.Success;
                }
                else
                {
                    printerInstalled = ActionResult.Failure;
                }

                installTraceListener.CloseAndWriteLog();
            }
            finally
            {
                if (installTraceListener != null)
                {
                    installTraceListener.Dispose();
                }
            }
            return(printerInstalled);
        }
Ejemplo n.º 6
0
        public override void Install(
            IDictionary stateSaver)
        {
            // enable the line below to debug this installer; disable otherwise
            //MessageBox.Show("Attach the .NET debugger to the 'MSI Debug' msiexec.exe process now for debug. Click OK when ready...", "MSI Debug");

            // if the installer is running in repair mode, it will try to re-install Myrtille... which is fine
            // problem is, it won't uninstall it first... which is not fine because some components can't be installed twice!
            // thus, prior to any install, try to uninstall first

            Context.LogMessage("Myrtille.Services is being installed, cleaning first");

            try
            {
                Uninstall(null);
            }
            catch (Exception exc)
            {
                Context.LogMessage(string.Format("Failed to clean Myrtille.Services ({0})", exc));
            }

            Context.LogMessage("Installing Myrtille.Services");

            base.Install(stateSaver);

            try
            {
                // install Myrtille PDF printer
                var scribeInstaller = new PdfScribeInstaller(Context);
                var printerDir      = Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin");
                var driversDir      = Path.Combine(printerDir, Environment.Is64BitOperatingSystem ? "amd64" : "x86");
                if (!scribeInstaller.InstallPdfScribePrinter(driversDir, Path.Combine(printerDir, "Myrtille.Printer.exe"), string.Empty))
                {
                    MessageBox.Show(
                        ActiveWindow.Active,
                        "the myrtille virtual pdf printer could not be installed. Please check logs (into the install log folder)",
                        serviceInstaller.ServiceName,
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Warning);
                }

                // multifactor authentication
                string oasisApiKey = null;
                if (!string.IsNullOrEmpty(Context.Parameters["OASISAPIKEY"]))
                {
                    oasisApiKey = Context.Parameters["OASISAPIKEY"];
                }

                string oasisAppKey = null;
                if (!string.IsNullOrEmpty(Context.Parameters["OASISAPPKEY"]))
                {
                    oasisAppKey = Context.Parameters["OASISAPPKEY"];
                }

                string oasisAppId = null;
                if (!string.IsNullOrEmpty(Context.Parameters["OASISAPPID"]))
                {
                    oasisAppId = Context.Parameters["OASISAPPID"];
                }

                // enterprise mode
                string enterpriseAdminGroup = null;
                if (!string.IsNullOrEmpty(Context.Parameters["ENTERPRISEADMINGROUP"]))
                {
                    enterpriseAdminGroup = Context.Parameters["ENTERPRISEADMINGROUP"];
                }

                string enterpriseDomain = null;
                if (!string.IsNullOrEmpty(Context.Parameters["ENTERPRISEDOMAIN"]))
                {
                    enterpriseDomain = Context.Parameters["ENTERPRISEDOMAIN"];
                }

                // load config
                var config     = new XmlDocument();
                var configPath = Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.exe.config");
                config.Load(configPath);

                // app settings
                var navigator   = config.CreateNavigator();
                var appSettings = XmlTools.GetNode(navigator, "/configuration/appSettings");
                if (appSettings != null)
                {
                    // MFAAuthAdapter
                    if (!string.IsNullOrEmpty(oasisApiKey) && !string.IsNullOrEmpty(oasisAppKey) && !string.IsNullOrEmpty(oasisAppId))
                    {
                        XmlTools.UncommentConfigKey(config, appSettings, "MFAAuthAdapter");
                        XmlTools.WriteConfigKey(appSettings, "OASISApiKey", oasisApiKey);
                        XmlTools.WriteConfigKey(appSettings, "OASISAppKey", oasisAppKey);
                        XmlTools.WriteConfigKey(appSettings, "OASISAppID", oasisAppId);
                    }

                    // EnterpriseAdapter
                    if (!string.IsNullOrEmpty(enterpriseAdminGroup) && !string.IsNullOrEmpty(enterpriseDomain))
                    {
                        XmlTools.UncommentConfigKey(config, appSettings, "EnterpriseAdapter");
                        XmlTools.WriteConfigKey(appSettings, "EnterpriseAdminGroup", enterpriseAdminGroup);
                        XmlTools.WriteConfigKey(appSettings, "EnterpriseDomain", enterpriseDomain);
                    }
                }

                // save config
                config.Save(configPath);

                Context.LogMessage("Installed Myrtille.Services");
            }
            catch (Exception exc)
            {
                Context.LogMessage(string.Format("Failed to install Myrtille.Services ({0})", exc));
                throw;
            }
        }
Ejemplo n.º 7
0
        public override void Install(
            IDictionary stateSaver)
        {
            // enable the line below to debug this installer; disable otherwise
            //MessageBox.Show("Attach the .NET debugger to the 'MSI Debug' msiexec.exe process now for debug. Click OK when ready...", "MSI Debug");

            // if the installer is running in repair mode, it will try to re-install Myrtille... which is fine
            // problem is, it won't uninstall it first... which is not fine because some components can't be installed twice!
            // thus, prior to any install, try to uninstall first

            Context.LogMessage("Myrtille.Services is being installed, cleaning first");

            try
            {
                Uninstall(null);
            }
            catch (Exception exc)
            {
                Context.LogMessage(string.Format("Failed to clean Myrtille.Services ({0})", exc));
            }

            Context.LogMessage("Installing Myrtille.Services");

            base.Install(stateSaver);

            try
            {
                var process = new Process();

                bool debug = true;

                #if !DEBUG
                debug = false;
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                #endif

                process.StartInfo.FileName  = string.Format(@"{0}\WindowsPowerShell\v1.0\powershell.exe", Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess ? Environment.SystemDirectory.ToLower().Replace("system32", "sysnative") : Environment.SystemDirectory);
                process.StartInfo.Arguments = "-ExecutionPolicy Bypass" +
                                              " -Command \"& '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.Install.ps1") + "'" +
                                              " -BinaryPath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.exe") + "'" +
                                              " -DebugMode " + (debug ? "1" : "0") +
                                              " | Tee-Object -FilePath '" + Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Install.log") + "'" + "\"";

                process.Start();
                process.WaitForExit();
                if (process.ExitCode != 0)
                {
                    throw new Exception(string.Format("An error occured while running {0}. See {1} for more information.",
                                                      Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.Install.ps1"),
                                                      Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "log", "Myrtille.Services.Install.log")));
                }

                // load config
                var config     = new XmlDocument();
                var configPath = Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin", "Myrtille.Services.exe.config");
                config.Load(configPath);

                var navigator = config.CreateNavigator();

                // services port
                int servicesPort = 8080;
                if (!string.IsNullOrEmpty(Context.Parameters["SERVICESPORT"]))
                {
                    int.TryParse(Context.Parameters["SERVICESPORT"], out servicesPort);
                }

                if (servicesPort != 8080)
                {
                    // services endpoints
                    var services = XmlTools.GetNode(navigator, "/configuration/system.serviceModel/services");
                    if (services != null)
                    {
                        services.InnerXml = services.InnerXml.Replace("8080", servicesPort.ToString());
                    }
                }

                // multifactor authentication
                string oasisApiKey = null;
                if (!string.IsNullOrEmpty(Context.Parameters["OASISAPIKEY"]))
                {
                    oasisApiKey = Context.Parameters["OASISAPIKEY"];
                }

                string oasisAppKey = null;
                if (!string.IsNullOrEmpty(Context.Parameters["OASISAPPKEY"]))
                {
                    oasisAppKey = Context.Parameters["OASISAPPKEY"];
                }

                string oasisAppId = null;
                if (!string.IsNullOrEmpty(Context.Parameters["OASISAPPID"]))
                {
                    oasisAppId = Context.Parameters["OASISAPPID"];
                }

                // enterprise mode
                string enterpriseAdminGroup = null;
                if (!string.IsNullOrEmpty(Context.Parameters["ENTERPRISEADMINGROUP"]))
                {
                    enterpriseAdminGroup = Context.Parameters["ENTERPRISEADMINGROUP"];
                }

                string enterpriseDomain = null;
                if (!string.IsNullOrEmpty(Context.Parameters["ENTERPRISEDOMAIN"]))
                {
                    enterpriseDomain = Context.Parameters["ENTERPRISEDOMAIN"];
                }

                string enterpriseNetbiosDomain = null;
                if (!string.IsNullOrEmpty(Context.Parameters["ENTERPRISENETBIOSDOMAIN"]))
                {
                    enterpriseNetbiosDomain = Context.Parameters["ENTERPRISENETBIOSDOMAIN"];
                }

                // app settings
                var appSettings = XmlTools.GetNode(navigator, "/configuration/appSettings");
                if (appSettings != null)
                {
                    // MFAAuthAdapter
                    if (!string.IsNullOrEmpty(oasisApiKey) && !string.IsNullOrEmpty(oasisAppKey) && !string.IsNullOrEmpty(oasisAppId))
                    {
                        XmlTools.UncommentConfigKey(config, appSettings, "MFAAuthAdapter");
                        XmlTools.WriteConfigKey(appSettings, "OASISApiKey", oasisApiKey);
                        XmlTools.WriteConfigKey(appSettings, "OASISAppKey", oasisAppKey);
                        XmlTools.WriteConfigKey(appSettings, "OASISAppID", oasisAppId);
                    }

                    // EnterpriseAdapter
                    if (!string.IsNullOrEmpty(enterpriseAdminGroup) && !string.IsNullOrEmpty(enterpriseDomain))
                    {
                        XmlTools.UncommentConfigKey(config, appSettings, "EnterpriseAdapter");
                        XmlTools.WriteConfigKey(appSettings, "EnterpriseAdminGroup", enterpriseAdminGroup);
                        XmlTools.WriteConfigKey(appSettings, "EnterpriseDomain", enterpriseDomain);
                        XmlTools.WriteConfigKey(appSettings, "EnterpriseNetbiosDomain", enterpriseNetbiosDomain);
                    }
                }

                // save config
                config.Save(configPath);

                // pdf printer
                if (!string.IsNullOrEmpty(Context.Parameters["PDFPRINTER"]))
                {
                    // install Myrtille PDF printer
                    var scribeInstaller = new PdfScribeInstaller(Context);
                    var printerDir      = Path.Combine(Path.GetFullPath(Context.Parameters["targetdir"]), "bin");
                    var driversDir      = Path.Combine(printerDir, Environment.Is64BitOperatingSystem ? "amd64" : "x86");
                    if (!scribeInstaller.InstallPdfScribePrinter(driversDir, Path.Combine(printerDir, "Myrtille.Printer.exe"), string.Empty))
                    {
                        MessageBox.Show(
                            ActiveWindow.Active,
                            "the myrtille virtual pdf printer could not be installed. Please check logs (into the install log folder)",
                            "Myrtille.Services",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Warning);
                    }
                }

                Context.LogMessage("Installed Myrtille.Services");
            }
            catch (Exception exc)
            {
                Context.LogMessage(string.Format("Failed to install Myrtille.Services ({0})", exc));
                throw;
            }
        }
Ejemplo n.º 8
0
        public static ActionResult InstallPdfScribePrinter(Session session)
        {
            ActionResult printerInstalled;
            String       driverSourceDirectory  = session.CustomActionData["DriverSourceDirectory"];
            String       outputCommand          = session.CustomActionData["OutputCommand"];
            String       outputCommandArguments = session.CustomActionData["OutputCommandArguments"];
            String       CurrentDir             = session.CustomActionData["CurrentDir"];
            String       transform = session.CustomActionData["TRANSFORMS"];
            SessionLogWriterTraceListener installTraceListener = new SessionLogWriterTraceListener(session);

            installTraceListener.TraceOutputOptions = TraceOptions.DateTime;

            PdfScribeInstaller installer = new PdfScribeInstaller();

            installer.AddTraceListener(installTraceListener);


            try
            {
                System.Xml.Linq.XDocument doc = new System.Xml.Linq.XDocument();
                doc = System.Xml.Linq.XDocument.Load(CurrentDir + "\\" + "config.xml");

                session.Log("Parameters Loaded:" + (doc.Root != null));
                session.Log("Parameter Count:" + doc.Descendants("Parameter").Count());
                var parameters = doc.Descendants("Parameter").ToDictionary(n => n.Attribute("Name").Value, v => v.Attribute("Value").Value);

                if (parameters.Any())
                {
                    session.Log("Parameters loaded into Dictionary Count: " + parameters.Count());

                    //Set the Wix Properties in the Session object from the XML file
                    foreach (var parameter in parameters)
                    {
                        if (parameter.Key == "PrinterName" || parameter.Key == "PortName" || parameter.Key == "HardwareId")
                        {
                            session.CustomActionData[parameter.Key] = parameter.Value;
                        }
                    }
                }
                else
                {
                    session.Log("No Parameters loaded");
                }


                string folder         = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
                string specificFolder = Path.Combine(folder, "PdfScribe");

                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                if (transform == ":instance2")
                {
                    string printer2 = System.IO.Path.Combine(specificFolder, "scribe2");
                    System.IO.Directory.CreateDirectory(printer2);
                    doc.Save(@printer2 + "\\" + "Config.xml");
                }

                else if (transform == ":instance3")
                {
                    string printer3 = System.IO.Path.Combine(specificFolder, "scribe3");
                    System.IO.Directory.CreateDirectory(printer3);
                    doc.Save(@printer3 + "\\" + "Config.xml");
                }

                else if (transform == ":instance4")
                {
                    string printer4 = System.IO.Path.Combine(specificFolder, "scribe4");
                    System.IO.Directory.CreateDirectory(printer4);
                    doc.Save(@printer4 + "\\" + "Config.xml");
                }

                else if (transform == ":instance5")
                {
                    string printer5 = System.IO.Path.Combine(specificFolder, "scribe5");
                    System.IO.Directory.CreateDirectory(printer5);
                    doc.Save(@printer5 + "\\" + "Config.xml");
                }

                else if (transform == ":instance6")
                {
                    string printer6 = System.IO.Path.Combine(specificFolder, "scribe6");
                    System.IO.Directory.CreateDirectory(printer6);
                    doc.Save(@printer6 + "\\" + "Config.xml");
                }

                else if (transform == ":instance7")
                {
                    string printer7 = System.IO.Path.Combine(specificFolder, "scribe7");
                    System.IO.Directory.CreateDirectory(printer7);
                    doc.Save(@printer7 + "\\" + "Config.xml");
                }

                else if (transform == ":instance8")
                {
                    string printer8 = System.IO.Path.Combine(specificFolder, "scribe8");
                    System.IO.Directory.CreateDirectory(printer8);
                    doc.Save(@printer8 + "\\" + "Config.xml");
                }

                else if (transform == ":instance9")
                {
                    string printer9 = System.IO.Path.Combine(specificFolder, "scribe9");
                    System.IO.Directory.CreateDirectory(printer9);
                    doc.Save(@printer9 + "\\" + "Config.xml");
                }

                else if (transform == ":instance10")
                {
                    string printer10 = System.IO.Path.Combine(specificFolder, "scribe10");
                    System.IO.Directory.CreateDirectory(printer10);
                    doc.Save(@printer10 + "\\" + "Config.xml");
                }

                else if (transform == "" || transform == ":instance")
                {
                    string printer1 = System.IO.Path.Combine(specificFolder, "scribe");
                    System.IO.Directory.CreateDirectory(printer1);

                    doc.Save(@printer1 + "\\" + "Config.xml");
                }
                ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            }
            catch (Exception ex)
            {
                session.Log("ERROR in custom action SetInstallerProperties {0}", ex.ToString());
                MessageBox.Show(ex.Message);
                return(ActionResult.Failure);
            }

            //Update Printer variables for Specific Instance
            if (installer.UpdateVal(session.CustomActionData["PrinterName"], session.CustomActionData["PortName"], session.CustomActionData["HardwareId"]))
            {
                //MessageBox.Show("Success");
                //MessageBox.Show(installer.PRINTERNAME+"POrt="+installer.PORTNAME+"HD="+installer.HARDWAREID);
            }
            else
            {
                MessageBox.Show("Failed To Update Instance Setup");
            }

            try
            {
                if (installer.InstallPdfScribePrinter(driverSourceDirectory,
                                                      outputCommand,
                                                      outputCommandArguments))
                {
                    printerInstalled = ActionResult.Success;
                }
                else
                {
                    printerInstalled = ActionResult.Failure;
                }
                installTraceListener.CloseAndWriteLog();
            }
            finally
            {
                if (installTraceListener != null)
                {
                    installTraceListener.Dispose();
                }
            }
            return(printerInstalled);
        }
Ejemplo n.º 9
0
        //[Test]
        public void Test_UninstallPdfScribePrinter()
        {
            var scribeInstaller = new PdfScribeInstaller();

            scribeInstaller.UninstallPdfScribePrinter();
        }
Ejemplo n.º 10
0
        //[Test]
        public void Test_RemovePdfScribePortMonitor()
        {
            var scribeInstaller = new PdfScribeInstaller();

            scribeInstaller.RemovePdfScribePortMonitor();
        }
Ejemplo n.º 11
0
        //[Test]
        public void Test_InstallPdfScribePrinter()
        {
            var scribeInstaller = new PdfScribeInstaller();

            scribeInstaller.InstallPdfScribePrinter(@"C:\Code\PdfScribe\Lib\", String.Empty, String.Empty);
        }
Ejemplo n.º 12
0
        //[Test]
        public void Test_IsPrinterDriverInstalled()
        {
            var scribeInstaller = new PdfScribeInstaller();

            scribeInstaller.IsPrinterDriverInstalled_Test("PDF Scribe Virtual Printer");
        }
Ejemplo n.º 13
0
        //[Test]
        public void Test_AddPdfScribePort()
        {
            var scribeInstaller = new PdfScribeInstaller();

            scribeInstaller.AddPdfScribePort_Test();
        }
Ejemplo n.º 14
0
        //[Test]
        public void Test_RemovePdfScribeDriver()
        {
            var scribeInstaller = new PdfScribeInstaller();

            scribeInstaller.RemovePDFScribePrinterDriver();
        }
Ejemplo n.º 15
0
        //[Test]
        public void Test_DeletePdfScribePort()
        {
            var scribeInstaller = new PdfScribeInstaller();

            scribeInstaller.DeletePdfScribePort();
        }