Wix在Patch期间有条件地启动服务

时间:2012-09-17 20:06:30

标签: .net wix windows-installer installation wix3.5

我有一个安装服务的MSI安装程序,默认情况下它已停止。用户可以手动将其打开或使其停止。我也有一个MSI的补丁。

问题:安装修补程序时,服务已停止。如果它是ON,我希望Patch将服务保持为ON,如果为OFF则保持OFF。我怎样才能实现这种功能?

2 个答案:

答案 0 :(得分:2)

据我所知,修补方式有效,这是预期的默认行为。

看,当您第一次安装MSI软件包(初始安装)时,该服务将安装为已停止,并且MSI软件包将缓存在系统上的特殊位置。安装修补程序时,将安装程序包带来的更改修补程序应用于缓存的MSI,从而以所需方式对其进行转换,并重新安装程序包。因此,只要初始包中包含将服务安装为已停止的说明,并且修补程序更改不会对此进行修改,则会重新安装该组件,并且服务最终会被停止 - 就像在初始安装后一样。 / p>

要更改此行为,您可以尝试将包含服务的组件标记为NeverOverwrite。如果为组件设置NeverOverwrite='yes',则在修补程序应用程序期间不会重新安装它,因此现有服务将保持不变并保持应用修补程序之前的状态。

我不确定您是否需要在初始安装包中以所描述的方式更改组件。希望,在新的改变它将有效。否则,如果您已经发布了该产品的初始版本,则可能会出现问题。

我应警告您,我没有尝试这种确切的方案,因此您可能需要先验证此建议。

答案 1 :(得分:0)

所以最后我使用了两个自定义操作。在安装补丁之前保存服务状态的一个。我使用了MYSERVICE_STATUS等属性,如果服务为STOPPED,则设置为“0”;如果服务为RUNNING则设置为“1”。

在Patch安装完成后,我启动另一个自定义操作,检查这些属性和每个服务的最终状态。如果MYSERVICE_STATUS == 1和服务现在是STOPPED,我重新启动它。