4

我正在开发一个应该在 wix v3.8 中安装 Windows 服务的安装程序。问题是我们需要进行重大升级而不卸载服务只是为了停止它。

我们在包含服务 exe 文件的组件中使用 ServiceInstall 和 ServiceControl。有没有办法使 ServiceInstall 的执行有条件(使用 REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE 之类的条件),以便在升级时不卸载服务(只是停止以便我们可以升级文件)?

一种解决方案是使用自定义操作,但也许有更好的方法?

谢谢!

4

2 回答 2

8

您必须覆盖处理这些元素的操作。如果适用于您的 MSI 包中的所有服务(如果您只有一项服务,那么对您来说很好),只要您没问题,以下内容可能会起作用:

<InstallExecuteSequence>
   <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>
</InstallExecuteSequence>

您不需要为删除设置条件,因为 DeleteServices 已经考虑了组件的状态。

于 2013-04-13T03:45:09.297 回答
2

最终为我工作的是

  <DeleteServices><![CDATA[REMOVE ~= "ALL" AND (NOT UPGRADINGPRODUCTCODE)]]> </DeleteServices>
  <InstallServices><![CDATA[NOT Installed]]> </InstallServices>

我通过一系列反复试验以及结合其他一些具有类似答案的线程得出了这个答案。

只有 不起作用的可能原因之一是因为 WIX 在重新安装时也会删除该服务。我们只想在初始安装期间安装该服务一次。我们还希望确保在卸载时删除该服务。这是唯一对我有用的条件组合,允许服务保留其设置和用户帐户。

于 2019-08-15T23:10:12.873 回答