如何在安装后自动启动您的服务?
如何从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(); } } }