安装程序完成后自动启动服务

时间:2011-10-27 18:07:41

标签: c# service installer

  

可能重复:
  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,它将自动启动)。

安装程序进程完成后,我需要做什么才能自动启动我的服务?

2 个答案:

答案 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();
    }

除此之外,请检查以下

  • 安装程序启动类型:自动
  • 帐户:本地系统

除了服务安装程序之外,您还需要通过提供上述服务安装程序的主要输出来创建安装项目。

enter image description here

通过提供服务安装程序项目输出,在设置中

至少在安装时创建自定义操作。

enter image description here

来自here的更多信息。希望这能帮助你。

答案 1 :(得分:0)

我假设Start立即返回,并在后台启动服务。查看文档:{​​{3}}