internal static void uninstallService()
        {
            ServiceInstaller    serviceInstaller    = null;
            TransactedInstaller transactedInstaller = null;

            try
            {
                serviceInstaller             = new ServiceInstaller();
                serviceInstaller.ServiceName = "OpenVPNManager";
                transactedInstaller          = new TransactedInstaller();
                transactedInstaller.Installers.Add(serviceInstaller);
                transactedInstaller.Uninstall(null);
            }
            catch (InstallException e)
            {
                if (e.InnerException != null && e.InnerException is SecurityException)// Probably: "Permission denied"
                {
                    String MSG_ServiceInstallPermissionErrorAdvice = Program.res.GetString("MSG_ServiceInstallPermissionErrorAdvice");
                    MessageBox.Show("Error: " + e.InnerException.Message + "\r\n\r\n" + MSG_ServiceInstallPermissionErrorAdvice);
                }
                else if (e.InnerException != null && e.InnerException is Win32Exception)// Probably: "Service does not exist."
                {
                    MessageBox.Show("Error: " + e.InnerException.Message);
                }
                else
                {
                    throw;
                }
            }
            finally
            {
                serviceInstaller.Dispose();
                transactedInstaller.Dispose();
            }
        }
        private bool RunTransactedInstaller(Installer serviceIinstaller, bool install)
        {
            bool flag;
            var  installer = new TransactedInstaller();

            try
            {
                installer.Installers.Add(serviceIinstaller);
                var cmd     = new[] { string.Format("/assemblypath={0}", Assembly.GetEntryAssembly().Location) };
                var context = new InstallContext("", cmd);
                installer.Context = context;

                if (install)
                {
                    installer.Install(new Hashtable());
                }
                else
                {
                    installer.Uninstall(null);
                }
                flag = true;
            }
            catch (Exception)
            {
                flag = false;
            }
            finally
            {
                installer.Dispose();
            }

            return(flag);
        }
예제 #3
0
        private static void Main(string[] args)
        {
            // Set up the crash dump handler.
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(unhandledException);

            cultureInfo = new System.Globalization.CultureInfo("en-GB");
            settingsManager = new SettingsManager();
            cloudFlareAPI = new CloudFlareAPI();

            if (args.Length > 0)
            {
                if (args[0] == "/service")
                {
                    runService();
                    return;
                }

                if (args[0] == "/install")
                {
                    if (!isAdmin)
                    {
                        AttachConsole(-1 /*ATTACH_PARENT_PROCESS*/ );
                        Console.WriteLine("Need to be running from an elevated (Administrator) command prompt.");
                        FreeConsole();
                        return;
                    }

                    TransactedInstaller ti = new TransactedInstaller();
                    ti.Installers.Add(new ServiceInstaller());
                    ti.Context = new InstallContext("", null);
                    ti.Context.Parameters["assemblypath"] = "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\" /service";
                    ti.Install(new System.Collections.Hashtable());
                    ti.Dispose();
                    return;
                }

                if (args[0] == "/uninstall")
                {
                    if (!isAdmin)
                    {
                        AttachConsole(-1 /*ATTACH_PARENT_PROCESS*/ );
                        Console.WriteLine("Need to be running from an elevated (Administrator) command prompt.");
                        FreeConsole();
                        return;
                    }

                    TransactedInstaller ti = new TransactedInstaller();
                    ti.Installers.Add(new ServiceInstaller());
                    ti.Context = new System.Configuration.Install.InstallContext("", null);
                    ti.Context.Parameters["assemblypath"] = "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\" /service";
                    ti.Uninstall(null);
                    ti.Dispose();
                    return;
                }
            }

            runGUI();
            return;
        }//end Main()
예제 #4
0
 public void Dispose()
 {
     try
     {
         _transactedInstaller.Dispose();
     }
     finally
     {
         _installer.Dispose();
     }
 }
예제 #5
0
        /// <summary>
        /// 安装windowservice
        /// </summary>
        /// <param name="serviceName">WindowService名称</param>
        /// <param name="serviceProgramFileFullPath">服务的执行程序完整路径</param>
        /// <returns>成功返回 true,否则返回 false;</returns>
        public static bool InstallService(string serviceName, string serviceProgramFileFullPath)
        {
            if (IsServiceIsExisted(serviceName))
            {
                return(true);
            }
            TransactedInstaller transactedInstaller = new TransactedInstaller();
            AssemblyInstaller   assemblyInstaller   = new AssemblyInstaller(serviceProgramFileFullPath, new string[] {});

            transactedInstaller.Installers.Add(assemblyInstaller);
            transactedInstaller.Install(new Hashtable());
            assemblyInstaller.Dispose();
            transactedInstaller.Dispose();
            return(IsServiceIsExisted(serviceName));
        }
예제 #6
0
        /// <summary>
        /// 卸载windowservice
        /// </summary>
        /// <param name="serviceName">WindowService名称</param>
        /// <param name="serviceProgramFullPath">服务的执行程序完整路径</param>
        /// <returns>成功返回 true,否则返回 false;</returns>
        public static bool UninstallService(string serviceName, string serviceProgramFullPath)
        {
            if (!IsServiceIsExisted(serviceName))
            {
                return(true);
            }
            string[]            cmdline             = {};
            TransactedInstaller transactedInstaller = new TransactedInstaller();
            AssemblyInstaller   assemblyInstaller   = new AssemblyInstaller(serviceProgramFullPath, cmdline);

            transactedInstaller.Installers.Add(assemblyInstaller);
            transactedInstaller.Uninstall(null);
            assemblyInstaller.Dispose();
            transactedInstaller.Dispose();
            return(!IsServiceIsExisted(serviceName));
        }
예제 #7
0
        /// <summary>
        /// 安装windowservice
        /// </summary>
        /// <param name="serviceName">WindowService名称</param>
        /// <param name="serviceProgramFileFullPath">服务的执行程序完整路径</param>
        /// <param name="windowServiceStartType"></param>
        /// <returns>成功返回 true,否则返回 false;</returns>
        public bool InstallWinService(string serviceName, string serviceProgramFileFullPath, int windowServiceStartType)
        {
            if (CheckWinServiceIsExisted(serviceName))
            {
                return(true);
            }
            TransactedInstaller transactedInstaller = new TransactedInstaller();
            AssemblyInstaller   assemblyInstaller   = new AssemblyInstaller(serviceProgramFileFullPath, new string[] { });

            transactedInstaller.Installers.Add(assemblyInstaller);
            transactedInstaller.Install(new Hashtable());
            assemblyInstaller.Dispose();
            transactedInstaller.Dispose();
            ChangeWinServiceStartType(serviceName, windowServiceStartType);
            return(CheckWinServiceIsExisted(serviceName));
        }
        /// <summary>
        /// Uninstall a windows service at runtime.
        /// </summary>
        /// <param name="windowsServiceSetup">Instance of WindowsServiceSetup.</param>
        public static void RuntimeUninstall(WindowsServiceSetup windowsServiceSetup)
        {
            TransactedInstaller transactedInstaller = null;

            try
            {
                transactedInstaller = new TransactedInstaller();
                transactedInstaller.Installers.Add(new WindowsServiceInstaller(windowsServiceSetup));
                transactedInstaller.Context = new InstallContext(null, new[] { string.Format("/assemblypath=\"{0}\"", windowsServiceSetup.ServiceAssemblyPath) });
                transactedInstaller.Uninstall(null);
            }
            catch (Exception e)
            {
                InternalLogger.Log(e);
            }
            finally
            {
                if (transactedInstaller != null)
                {
                    transactedInstaller.Dispose();
                    transactedInstaller = null;
                }
            }
        }
        internal static void installService()
        {
            ServiceInstaller        serviceInstaller        = null;
            ServiceProcessInstaller serviceProcessInstaller = null;
            Installer           projectInstaller            = null;
            TransactedInstaller transactedInstaller         = null;

            try
            {
                serviceInstaller             = new ServiceInstaller();
                serviceInstaller.ServiceName = "OpenVPNManager";
                serviceInstaller.StartType   = ServiceStartMode.Automatic;

                serviceProcessInstaller          = new ServiceProcessInstaller();
                serviceProcessInstaller.Account  = System.ServiceProcess.ServiceAccount.LocalSystem;
                serviceProcessInstaller.Password = null;
                serviceProcessInstaller.Username = null;

                projectInstaller = new Installer();
                projectInstaller.Installers.Add(serviceInstaller);
                projectInstaller.Installers.Add(serviceProcessInstaller);

                transactedInstaller = new TransactedInstaller();
                transactedInstaller.Installers.Add(projectInstaller);
                transactedInstaller.Context = new InstallContext();
                transactedInstaller.Context.Parameters["assemblypath"] = Assembly.GetExecutingAssembly().Location + "\" \"/EXECUTESERVICE";
                transactedInstaller.Install(new Hashtable());
            }
            catch (InvalidOperationException e)
            {
                if (e.InnerException != null && e.InnerException is Win32Exception)// Probably: "Service already exists."
                {
                    MessageBox.Show("Error: " + e.InnerException.Message);
                }
                else if (e.InnerException != null && e.InnerException is InvalidOperationException && e.InnerException.InnerException != null && e.InnerException.InnerException is Win32Exception)// Probably: "Permission denied"
                {
                    String MSG_ServiceInstallPermissionErrorAdvice = Program.res.GetString("MSG_ServiceInstallPermissionErrorAdvice");
                    MessageBox.Show("Error: " + e.InnerException.InnerException.Message + "\r\n\r\n" + MSG_ServiceInstallPermissionErrorAdvice);
                }
                else
                {
                    throw;
                }
            }
            finally
            {
                if (serviceInstaller != null)
                {
                    serviceInstaller.Dispose();
                }
                if (serviceProcessInstaller != null)
                {
                    serviceProcessInstaller.Dispose();
                }
                if (projectInstaller != null)
                {
                    projectInstaller.Dispose();
                }
                if (transactedInstaller != null)
                {
                    transactedInstaller.Dispose();
                }
            }
        }
예제 #10
0
 public void Dispose()
 {
     transactedInstaller.Dispose();
 }