Wix 安装程序仅在服务已经 运行 时才启动服务

Wix Installer starting a service only if it was already running

在 Wix 安装程序中,如何才能让安装程序仅在更新过程中 started/running 并被安装程序停止时才启动服务?

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

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

如上所示,您将需要 运行 使用 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";
}