1

我有一个自定义操作,只能在安装期间执行,而不是在次要版本升级和删除期间执行?我尝试了不同的条件,但 CA 在次要版本期间执行。

1) (未安装)或未安装(REMOVE="ALL" AND UPGRADINGPRODUCTCODE)

2)(未安装)

3)(未安装)或未安装(已安装 AND REMOVE="ALL" AND UPGRADINGPRODUCTCODE)

但没有什么对我有用。我的 CA 执行了两次可能是因为在升级期间安装程序正在卸载和安装。任何关于如何仅在安装期间而不是在升级期间执行 CA 的建议。

4

1 回答 1

3

请测试:您可以尝试(NOT Installed) AND (NOT WIX_UPGRADE_DETECTED)作为第一个测试(请参阅此答案),然后使用下面的调试方法进行正确测试。没有保证!条件是臭名昭著的。

  • 测试您是否正在运行卸载作为主要升级的一部分的常用方法是使用UPGRADINGPRODUCTCODE属性
  • 您应该意识到这些问题UPGRADINGPRODUCTCODE- 它的行为可能与您预期的面值不同。
  • 我建议在上述情况下使用WIX_UPGRADE_DETECTED代替,UPGRADINGPRODUCTCODE以使其尽可能简单。这是一个特定于 WiX 的属性(UPGRADINGPRODUCTCODE是一个内置的 MSI 属性)。

重要提示:MSI 条件是出了名的难以正确处理。您可以通过此处描述的方法非常有效地调试 MSI 条件:如何仅在安装和修改时执行条件自定义操作?(见底部 - 使用 VBScript 消息框,然后在不同模式下运行设置)。

次要升级:请注意,次要升级非常有限-另一个答案。请查看这些限制以确保您了解这些限制,并且您可以在发布软件时牢记这些限制。还要确保为安装程序测试修复和修改方案。

忠告Often it is better to use the launch sequence of the application to perform application configuration than relying on custom actions since they have complex sequencing, conditioning and impersonation issues

于 2020-01-09T14:25:15.170 回答