Wix困境 - 这甚至可能吗?

时间:2011-08-02 07:31:04

标签: wix

我的目标:

要生成可在安装文件之前停止服务的WiX安装程序,请安装文件,然后重新启动已停止的服务

问题

每次运行安装程序时,服务的名称可能不同,但它们将始终具有前缀(前缀| servicename-servername),例如

coServSamSs-server1& coServSpooler-server1的

coServSamSs-otherserver2& coServSpooler-otherserver2。

我只能认为从安装程序运行powershell脚本来启动/停止这些服务将是最可行的选择,但下一个问题是我想在msi中包含这样的powershell脚本,所以它是否可能到

  1. 在任何其他文件之前安装脚本,然后运行它以停止服务
  2. 安装其余文件
  3. 再次运行脚本以重新启动服务
  4. 我知道有一些自定义活动来运行一个PowerShell脚本,虽然我没有运气这样做(见Wix - install and then run a powershell script

    建议好吗?我正在努力做甚么可能吗?

    提前致谢

1 个答案:

答案 0 :(得分:2)

您可以使用windows命令的自定义操作来停止特定服务

<CustomAction Id="A_StopService" Directory="INSTALDIR" ExeCommand='NET STOP "[SERVICENAME]"' Execute="immediate" Return='ignore'></CustomAction>

正如您告诉您有多项服务,您可以调用以C#或其他语言编写的自定义操作。 获取具有所需前缀的服务列表,然后在循环中

ServiceController controller = new ServiceController(servicename);

try
{
    if (controller.Status == ServiceControllerStatus.Running | controller.Status == ServiceControllerStatus.Paused)
    {
        controller.Stop();

        controller.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 0, 12));

        controller.Close();
    }
}
catch (Exception ex)
{
    //Some message
}

像这样停止所有服务,一旦任务完成,重启服务。