【问题标题】:Start service with Visual Studio Setup Project installer使用 Visual Studio 安装项目安装程序启动服务
【发布时间】:2012-05-19 11:07:04
【问题描述】:

我有一个用于安装 Windows 服务的 Visual Studio 安装项目。该服务设置为自动运行,此时通过将我的服务添加为自定义操作可以正常安装。但是,我希望安装程序在安装完成后启动服务。这可能吗?

在相关说明中,我是否需要在卸载和/或升级时手动停止服务?

【问题讨论】:

    标签: visual-studio-2008 .net-2.0 windows-installer setup-project


    【解决方案1】:

    在安装后覆盖自定义操作处理程序以启动 Windows 服务。虽然您设置了服务属性 type=Automatic,但除非我们明确启动,否则服务不会启动:

    protected override void OnAfterInstall(IDictionary savedState)
    {
            using (var sc = new ServiceController(serviceInstaller1.ServiceName))
            {
                sc.Start();
            }
    }
    

    Visual Studio 安装程序没有停止 FileInUse 提示,尽管我们使用自定义操作停止服务以进行卸载/升级。似乎 VS Installer 没有太多复杂性来更改安装程序的顺序,因为我们无法控制这种行为。但是,最好停止卸载/升级服务。

    【讨论】:

    • 我不得不把它放在 Committed 事件中,好像我的服务在 OnAfterInstall 中不可用。
    【解决方案2】:

    您也可以使用自定义操作来启动/停止服务。从您的自定义操作中,您只需调用以下实用程序:http://technet.microsoft.com/en-us/library/cc736564(v=ws.10).aspx

    是的,对于升级/卸载,您应该在删除文件之前停止服务,这样您就可以避免操作系统提示“正在使用的文件”。

    【讨论】:

    • 对于自定义操作,我只需右键单击安装项目中的“自定义操作”根元素并选择“添加自定义操作...”并选择我的服务,安装程序会自动处理添加正确的自定义操作和安装/卸载服务本身。听起来我需要添加一些代码来启动服务本身?另外,到目前为止,我在服务运行和卸载时没有遇到“文件正在使用”错误的任何问题,所以我想知道这是否真的需要?
    • 好的,我想我明白了。您必须覆盖服务安装程序类中的 Commit 方法。然后只需调用 new ServiceControl("servicename").Start().
    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多