public ServiceInstaller(){ //... Installer code here this.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall);}void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e){ using (ServiceController sc = new ServiceController(serviceInstaller.ServiceName)) { sc.Start(); }}
注意配置为本地服务和自动启动模式。。。 using System.ComponentModel; using System.Configuration.Install; using System.ServiceProcess; namespace Example.of.name.space { [RunInstaller(true)] public partial class ServiceInstaller : Installer { private readonly ServiceProcessInstaller processInstaller; private readonly System.ServiceProcess.ServiceInstaller serviceInstaller; public ServiceInstaller() { InitializeComponent(); processInstaller = new ServiceProcessInstaller(); serviceInstaller = new System.ServiceProcess.ServiceInstaller(); // Service will run under system account processInstaller.Account = ServiceAccount.LocalSystem; // Service will have Start Type of Manual serviceInstaller.StartType = ServiceStartMode.Automatic; serviceInstaller.ServiceName = "Windows Automatic Start Service"; Installers.Add(serviceInstaller); Installers.Add(processInstaller); serviceInstaller.AfterInstall += ServiceInstaller_AfterInstall; } private void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e) { ServiceController sc = new ServiceController("Windows Automatic Start Service"); sc.Start(); } } }
这种通过进程 命令的方式也行,但是不太好
////// 安装后自动启动服务 /// /// /// private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e) { Process p = new Process { StartInfo = { FileName = "cmd.exe", UseShellExecute = false, RedirectStandardInput = true, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true } }; p.Start(); const string cmdString = "sc start 你的服务名称"; //cmd命令, 服务的名称 p.StandardInput.WriteLine(cmdString); p.StandardInput.WriteLine("exit"); }