菲尔已经回答了。我将在出发前发布几个小时前写的内容。你指定的条件对我来说看起来不错。也许我会快速回顾一下可能会引起混淆的事情——比如什么时候运行自定义操作?
主要升级:主要升级实际上是安装新应用程序版本并卸载旧版本 - 可能有不同的卸载计划(卸载旧版本并安装新版本,或安装新版本并卸载旧版本)。因此,在主要升级操作期间,卸载序列仅针对旧安装程序运行,而新安装程序仅运行其安装序列。这对于了解自定义操作何时以及为何运行至关重要。1)
2)
自定义操作和主要升级:换句话说:这种排序可能会对自定义操作排序造成相当大的混淆,因为它可能看起来是从新设置运行的操作,而实际上它是在旧设置的卸载中运行的序列。如果您对排序草率,典型的错误是在升级过程中看到相同的操作多次运行 - 每个设置可能两次(总共四次) - 如果您在立即模式下运行自定义操作。
重大升级不进行改造:正如 Phil 解释的那样,您不能在新设置中添加将在旧设置的卸载序列期间运行的自定义操作。该自定义操作必须是原始设置的一部分,或者通过次要升级添加(即就地升级现有安装,而不是卸载并重新安装它)。
重要:
UPGRADINGPRODUCTCODE
仅在作为主要升级的一部分被卸载的设置中设置。在安装的新版本中没有设置。
UPGRADINGPRODUCTCODE
因此,安装设置中的条件不成立,仅在卸载设置中。
WIX_UPGRADE_DETECTED
仅在使用 WiX 的 MajorUpgrade 元素的设置中设置,该元素已检测到另一个版本正在作为其安装的一部分被卸载。
WIX_UPGRADE_DETECTED
因此,该条件在安装设置中为真,但在卸载设置中不成立。
WIX_UPGRADE_DETECTED:更详细地说,用于为升级过程WIX_UPGRADE_DETECTED
设置内置 MSI 属性的 WiX 标准或约定ActionProperty
所有支持重大升级的 MSI 文件都有这样的属性,WiX 只是以标准方式命名。该属性设置在“升级”表的列中,并且当安装程序在安装过程中在同一框中找到相关产品(较低版本(因此将被卸载))时设置该属性。
WIX_DOWNGRADE_DETECTED:请注意,在使用 MajorUpgrade 元素的标准 WiX 编译 MSI 中,还有WIX_DOWNGRADE_DETECTED
- 用于列出发现的版本高于运行设置的产品的属性。这些会阻止安装有问题的设置 - 在大多数情况下(除非设置是由设置设计者自定义的)。
升级表中指定的操作属性可以是“任何东西”,但MajorUpgrade 元素的“便利功能”以一种对大多数用途都有意义的“自动魔法”方式为您执行此操作 - 使用提到的属性名称WIX_UPGRADE_DETECTED
和WIX_DOWNGRADE_DETECTED
. 检查您编译的 MSI 的升级表以了解其工作原理的详细信息。这是一个屏幕截图:

我写了这个另一个答案,展示了如何使用另一个属性名称(YOURUPGRADEPROPERTY
)作为“ ActionProperty
”:wix安装程序更新过程和确认对话框(链接的答案不是建议,仅供演示)。只是一个链接,现在我考虑一下可能对您不是很有用。
一些链接: