根据是否禁用Windows服务安装MSI

时间:2016-04-21 02:51:38

标签: wix windows-installer exe

我有一个Bundle设置,它安装了一个大约4 msis的组合,比如,MSI_1 - > MSI_2 - > MSI_3 - > MSI_4。

我希望仅在未禁用特定Windows服务时才安装MSI_4,即如果禁用了Windows服务(例如ABC)则不安装。我可以使用CustomAction并运行命令

"Get-WMIObject win32_service -filter "name='ABC'" -computer "." | select -expand state" 

检查状态。但是我如何使用它(我可以使用它吗?)来确定是否执行安装程序。请注意,所有4个MSI都有自己的项目,并且它们在一个VS解决方案的保护下组合在一起。我没有必要去CustomAction路线,所以如果你有其他的想法,我也可以试试。

感谢您的时间和提前帮助。如果有什么不清楚,请告诉我。

1 个答案:

答案 0 :(得分:2)

我会在这里回答我自己的问题,因为我找到了解决方案。我不知道的是服务列表也可以在注册表设置中使用,并且可以在我们正在使用Chain元素的wxs中使用Util:RegistrySearch元素。可以将服务状态从“运行”修改为“已禁用”以观察值的更改,并可以相应地设置InstallCondition。

<util:RegistrySearch Root="HKLM"
                     Key="System\CurrentControlSet\Services\ABC"
                     Win64="yes"
                     Value="Start"
                     Variable="State" />

Chain元素将如下:

<MsiPackage Id="package"
              Cache="no" Vital="yes"
              DisplayInternalUI="no"
              ForcePerMachine="yes"
              SourceFile="package.msi"
              InstallCondition="(State = <condition>)" />

希望这有帮助。