关于 WIX 自定义操作 REMOVE 的查询

问题描述

对 customAction 几乎没有怀疑

<Custom Action='CustomActionId.StopService2' After='CustomActionId.StopService1>REMOVE</Custom>

这个 REMOVE 标志是否可以使此操作仅在卸载或升级/卸载/修复/重新配置时运行我的自定义操作

解决方法

Windows 服务:不应通过自定义操作来控制或安装 Windows 服务,而应通过内置的 MSI 机制:ServiceInstall、{{ 3}}。这些 WiX 元素映射到相应的 MSI 表,它们支持正常服务正确安装所需的一切。如果做得好,这是非常可靠的。 ServiceControl(推荐少数)。

WiX 服务示例:这是一个很好的示例,说明如何使用 MSI / WIX 正确安装 Windows 服务: The various ways used (and abused) to install Windows Services

REMOVE:关于属性 https://github.com/rstropek/Samples/tree/master/WiXSamples/WindowsService。它将在多个 MSI 操作期间设置:修改、删除、升级。在完全卸载期间,它将被设置为 REMOVE=ALL,在其他情况下,它被设置为将在维护操作期间受到影响的功能列表。条件艰苦。 REMOVE

主要升级:请记住,在主要升级操作期间,会同时卸载旧版本和安装新版本。 REMOVE会在被卸载的版本中设置,但一般不会在安装的版本中设置。

如果您想在重大升级期间跳过该操作,您可以尝试:(REMOVE~="ALL") AND (NOT UPGRADINGPRODUCTCODE)Here is an older answer on conditions。这是explained in this answer

条件调试:您可以通过使用 VBScripts 在安装过程中显示消息框来调试条件 a longer answer on conditions and their permutations.(朝底部)。这对消除猜测有很大帮助。只需运行设置并显示自定义操作运行时的消息框 - 我保证您会有惊喜。当需要这种调试时,条件可以达到一个状态。 as explained here