Wix Installer仅在服务已经运行时才启动它

时间:2016-01-27 15:15:01

标签: service wix windows-services installer

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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