我正在开发一个应该在wix v3.8中安装Windows服务的安装程序。问题是我们需要进行重大升级而不卸载服务只是为了阻止它。
我们在包含服务exe文件的组件中使用ServiceInstall和ServiceControl。有没有办法使ServiceInstall的执行有条件(使用像REMOVE =“ALL”和NOT UPGRADINGPRODUCTCODE这样的条件),因此升级时不会卸载服务(刚刚停止,所以我们可以升级文件)?
一种解决方案是使用自定义操作,但也许有更好的方法?
谢谢!
答案 0 :(得分:8)
您必须覆盖处理这些元素的操作。如果它适用于您的MSI包中的所有服务(如果您只有一个服务,那么你好),以下内容可以正常工作:
<InstallExecuteSequence>
<DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>
</InstallExecuteSequence>
您不需要条件删除,因为DeleteServices已经考虑了Component的状态。
答案 1 :(得分:0)
最终为我工作的是
<DeleteServices><![CDATA[REMOVE ~= "ALL" AND (NOT UPGRADINGPRODUCTCODE)]]> </DeleteServices>
<InstallServices><![CDATA[NOT Installed]]> </InstallServices>
我通过一系列的尝试和错误尝试以及一些其他具有类似答案的线程的组合得出了这个答案。
仅无法正常运行的可能原因之一是因为WIX在重新安装时也会删除该服务。.在初始安装过程中,我们只希望安装一次该服务。我们还希望确保在卸载时删除该服务。这是对我有用的条件的唯一组合,允许服务保留其设置和用户帐户。