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); }
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()
public void Dispose() { try { _transactedInstaller.Dispose(); } finally { _installer.Dispose(); } }
/// <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)); }
/// <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)); }
/// <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(); } } }
public void Dispose() { transactedInstaller.Dispose(); }