我正在开发一个应该安装多个 Windows 服务的安装程序。我们经常制作新版本(使用新的 .msi 文件),并且我们使用重大升级使其更容易安装到以前的安装中。
问题是我们需要在不覆盖服务配置(例如帐户用户名和密码)的情况下更新服务文件。
我们正在使用 ServiceInstall
和 ServiceControl
在包含服务的组件内部 exe
文件。有没有办法让 ServiceInstall
执行有条件的(使用类似 REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE
的条件)所以升级时不会卸载服务(只是停止以便我们可以升级文件)?
一种解决方案是使用自定义操作,但也许有更好的方法?
谢谢!
最佳答案
看来我找错地方了。我的问题的解决方案是添加 NOT UPGRADINGPRODUCTCODE
到 DeleteServices
标准 Action 。
这解决了我的问题。这种方法的警告是当前 msi
安装的所有服务文件被删除(或不删除)。所以我不能在升级时有选择地删除/保留服务。但是,这对我来说很好 - 我满足了在升级过程中保留服务登录信息(但不是实际服务代码)的要求。
更新:DeleteServices
的条件可以从 InstallExecuteSequence
中的 WiX 访问元素。
关于Wix 主要升级 : how do I prevent Windows service reinstallation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2228855/