可能重复:
How to automatically start your service after install?
我在Windows 7 x64上运行Visual Studio 2008 C#.NET 3.5服务安装程序项目(MSI)。
我订阅了ServiceInstaller.OnAfterInstall
通知,以便在安装完成后启动我的服务。
[RunInstaller(true)]
public partial class MyInstaller : Installer
{
private System.ServiceProcess.ServiceInstaller my_installer_;
private void InitializeComponent()
{
// ...
this.my_installer_.AfterInstall += new System.Configuration.Install.InstallEventHandler(this.OnAfterInstall);
// ...
}
private void OnAfterInstall(object sender, InstallEventArgs e)
{
using (System.ServiceProcess.ServiceController svc =
new System.ServiceProcess.ServiceController("MyService"))
{
svc.Start(); // completes successfully
}
}
}
虽然该功能毫无例外地成功,但是当安装程序完成时我的服务永远不会运行。
事件日志显示没有与服务启动相关的故障,如果我去服务管理器,我可以手动启动服务(或重启PC,它将自动启动)。
安装程序进程完成后,我需要做什么才能自动启动我的服务?
答案 0 :(得分:1)
使用AfterInstall事件
在Service Installer类中创建AfterInstall
事件,并使用ServiceController
启动服务。
public ServiceInstaller()
{
InitializeComponent();
this.AfterInstall += new InstallEventHandler(ServiceInstaller_AfterInstall);
}
void ServiceInstaller_AfterInstall(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController(serviceInstaller1.ServiceName);
sc.Start();
}
使用提交事件
public ServiceInstaller()
{
InitializeComponent();
this.Committed += new InstallEventHandler(ProjectInstaller_Committed);
}
void ProjectInstaller_Committed(object sender, InstallEventArgs e)
{
ServiceController sc = new ServiceController(serviceInstaller1.ServiceName);
sc.Start();
}
或者您可以覆盖OnCommitted事件
protected override void OnCommitted(System.Collections.IDictionary savedState)
{
base.OnCommitted(savedState);
new ServiceController(serviceInstaller1.ServiceName).Start();
}
除此之外,请检查以下
除了服务安装程序之外,您还需要通过提供上述服务安装程序的主要输出来创建安装项目。
通过提供服务安装程序项目输出,在设置中
至少在安装时创建自定义操作。
来自here的更多信息。希望这能帮助你。
答案 1 :(得分:0)
我假设Start立即返回,并在后台启动服务。查看文档:{{3}}