我有一个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路线,所以如果你有其他的想法,我也可以试试。
感谢您的时间和提前帮助。如果有什么不清楚,请告诉我。
答案 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>)" />
希望这有帮助。