我有一个安装服务的MSI安装程序,默认情况下它已停止。用户可以手动将其打开或使其停止。我也有一个MSI的补丁。
问题:安装修补程序时,服务已停止。如果它是ON,我希望Patch将服务保持为ON,如果为OFF则保持OFF。我怎样才能实现这种功能?
答案 0 :(得分:2)
据我所知,修补方式有效,这是预期的默认行为。
看,当您第一次安装MSI软件包(初始安装)时,该服务将安装为已停止,并且MSI软件包将缓存在系统上的特殊位置。安装修补程序时,将安装程序包带来的更改修补程序应用于缓存的MSI,从而以所需方式对其进行转换,并重新安装程序包。因此,只要初始包中包含将服务安装为已停止的说明,并且修补程序更改不会对此进行修改,则会重新安装该组件,并且服务最终会被停止 - 就像在初始安装后一样。 / p>
要更改此行为,您可以尝试将包含服务的组件标记为NeverOverwrite
。如果为组件设置NeverOverwrite='yes'
,则在修补程序应用程序期间不会重新安装它,因此现有服务将保持不变并保持应用修补程序之前的状态。
我不确定您是否需要在初始安装包中以所描述的方式更改组件。希望,在新的改变它将有效。否则,如果您已经发布了该产品的初始版本,则可能会出现问题。
我应警告您,我没有尝试这种确切的方案,因此您可能需要先验证此建议。
答案 1 :(得分:0)
所以最后我使用了两个自定义操作。在安装补丁之前保存服务状态的一个。我使用了MYSERVICE_STATUS
等属性,如果服务为STOPPED
,则设置为“0”;如果服务为RUNNING
则设置为“1”。
在Patch安装完成后,我启动另一个自定义操作,检查这些属性和每个服务的最终状态。如果MYSERVICE_STATUS == 1
和服务现在是STOPPED
,我重新启动它。