如何在安装后自动启动您的服务?

如何从Visual Studio安装项目运行安装之后自动启动服务?

我只是想到了这一点,并认为我会分享一般的好处的答案。 回答按照。 我愿意接受其他更好的方式来做到这一点。

将以下类添加到您的项目。

using System.ServiceProcess; class ServInstaller : ServiceInstaller { protected override void OnCommitted(System.Collections.IDictionary savedState) { ServiceController sc = new ServiceController("YourServiceNameGoesHere"); sc.Start(); } } 

安装程序将在安装程序结束后提取类并运行您的服务。

小接受答案:

您也可以像这样获取服务名称 – 避免在将来更改服务名称时出现任何问题:

 protected override void OnCommitted(System.Collections.IDictionary savedState) { new ServiceController(serviceInstaller1.ServiceName).Start(); } 

(每个安装程序都有一个ServiceProcessInstaller和一个ServiceInstaller,这里ServiceInstaller被称为serviceInstaller1。)

这种方法使用安装程序类和最less量的代码。

 using System.ComponentModel; using System.Configuration.Install; using System.ServiceProcess; namespace MyProject { [RunInstaller(true)] public partial class ProjectInstaller : Installer { public ProjectInstaller() { InitializeComponent(); serviceInstaller1.AfterInstall += (sender, args) => new ServiceController(serviceInstaller1.ServiceName).Start(); } } } 

在Installer类devise器中定义serviceInstaller1 (inputServiceInstaller),并在devise器中设置它的ServiceName属性。

感谢它运行OK …

 private System.ServiceProcess.ServiceInstaller serviceInstaller1; private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e) { ServiceController sc = new ServiceController("YourServiceName"); sc.Start(); } 

而不是创build自己的类,请select项目安装程序中的服务安装程序,并将事件处理程序添加到Comitted事件中:

 private void serviceInstallerService1_Committed(object sender, InstallEventArgs e) { var serviceInstaller = sender as ServiceInstaller; // Start the service after it is installed. if (serviceInstaller != null && serviceInstaller.StartType == ServiceStartMode.Automatic) { var serviceController = new ServiceController(serviceInstaller.ServiceName); serviceController.Start(); } } 

只有当启动types设置为自动时,它才会启动您的服务。

基于上面的代码片断,我的ProjectInstaller.cs文件看起来像这样一个名为FSWServiceMgr.exe的服务。 服务确实在安装后开始。 请注意,在解决scheme资源pipe理器中select安装项目时,请单击“属性”选项卡(而不是右键单击)以设置公司等等。


 using System.ComponentModel; using System.Configuration.Install; using System.ServiceProcess; namespace FSWManager { [RunInstaller(true)] public partial class ProjectInstaller : Installer { public ProjectInstaller() { InitializeComponent(); this.FSWServiceMgr.AfterInstall += FSWServiceMgr_AfterInstall; } static void FSWServiceMgr_AfterInstall(object sender, InstallEventArgs e) { new ServiceController("FSWServiceMgr").Start(); } } }