我的目标:
要生成可在安装文件之前停止服务的WiX安装程序,请安装文件,然后重新启动已停止的服务
问题
每次运行安装程序时,服务的名称可能不同,但它们将始终具有前缀(前缀| servicename-servername),例如
coServSamSs-server1& coServSpooler-server1的
coServSamSs-otherserver2& coServSpooler-otherserver2。
我只能认为从安装程序运行powershell脚本来启动/停止这些服务将是最可行的选择,但下一个问题是我想在msi中包含这样的powershell脚本,所以它是否可能到
我知道有一些自定义活动来运行一个PowerShell脚本,虽然我没有运气这样做(见Wix - install and then run a powershell script)
建议好吗?我正在努力做甚么可能吗?
提前致谢
答案 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
}
像这样停止所有服务,一旦任务完成,重启服务。