【问题标题】:Wix Installer starting a service only if it was already running仅当服务已在运行时,Wix 安装程序才启动服务
【发布时间】:2016-01-27 15:15:00
【问题描述】:

在 Wix 安装程序中,如何使安装程序仅在更新过程中由安装程序启动/运行和停止时才启动服务?

编辑 澄清一下,我有一项服务,它是我的安装程序的一个组件,它是根据某些参数安装的。我遇到的问题是,如果我设置了 ,那么无论安装前的状态如何,都会启动该服务。我希望它只有在我的 wix 安装程序运行之前运行时才会启动。

【问题讨论】:

标签: service wix windows-services installation


【解决方案1】:

我认为您需要使用自定义操作代码来执行此操作。我知道 WiX 或 Windows Installer 中没有内置功能可以跟踪服务是否在安装开始时正在运行。因此,您需要使用自定义操作询问服务状态并相应地设置属性。在安装结束时(在 StartServices 标准操作所在的位置),您可以使用自定义操作来重新启动该服务。我不会在 ServiceControl 操作上使用条件来启动服务,因为这会影响您要启动的所有服务。

【讨论】:

    【解决方案2】:

    如上所述,您将需要使用 c# 运行自定义操作,例如:

    ServiceController sc = new ServiceController(SERVICENAME);
    
    switch (sc.Status)
    {
        case ServiceControllerStatus.Running:
          return "Running";
        case ServiceControllerStatus.Stopped:
          return "Stopped";
        case ServiceControllerStatus.Paused:
          return "Paused";
        case ServiceControllerStatus.StopPending:
          return "Stopping";
        case ServiceControllerStatus.StartPending:
          return "Starting";
        default:
          return "Status Changing";
    }
    

    【讨论】:

    • 谢谢 - 这与我最终所做的一致。我希望避免不使用自定义操作,但我正在检查哪些服务在 stopservices 事件之前正在运行,并在 WiX 会话中设置一个属性,稍后我会在单独的自定义操作中检查以启动它们再次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多