1

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

问题:安装补丁时,服务停止。我希望补丁在服务开启时保持开启,如果服务关闭则关闭。我怎样才能实现这个功能?

4

2 回答 2

2

据我了解修补的工作方式,这是预期的默认行为。

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

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

我不确定您是否需要按照初始安装包中描述的方式更改组件。希望,在较新的版本中更改它会起作用。否则,如果您已经发布了产品的初始版本,这可能是个问题。

我应该警告你,我没有尝试过这个确切的场景,所以你可能想先验证这个建议。

于 2012-09-17T20:32:39.500 回答
0

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

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

于 2012-09-19T16:59:19.117 回答