仅在卸载期间而不是重大升级期间运行Wix Custom操作

时间:2018-06-28 06:07:42

标签: wix windows-installer wix3.10 major-upgrade

我正在尝试使用在InstallInitialiseInstallFinalize标准动作之间安排的自定义动作来删除文件。

MajorUpgrade element用于设计升级。

但是,我希望自定义操作仅在卸载期间运行,而不在主要升级(包括卸载和安装)期间运行。

我使用以下条件来执行CUstom动作:

  1. (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")
  2. REMOVE AND NOT WIX_UPGRADE_DETECTED

是否有一种方法可以使用Wix中的属性唯一地检测主要升级?

2 个答案:

答案 0 :(得分:1)

您是否要在较旧的已安装产品(大概已经发货,因此如果没有补丁之类的更新就无法更改)或较新的升级安装中执行此操作并不明显。

我还将假定您已经查看了RemoveFile元素,但该元素不符合您的要求。

UPGRADINGPRODUCTCODE属性适用于要升级和卸载的旧产品。如果该文件属于该已安装产品,并且您只想在使用较旧安装的自定义操作进行卸载时将其删除,则该自定义操作的条件为:

REMOVE =“ ALL”而非升级产品代码

但是正如我所说,自定义操作必须已经安装在较旧的产品中,并且您在升级MSI中无法采取任何措施来解决该问题。

如果要从升级中删除文件,则升级期间的条件仅是:

WIX_UPGRADE_DETECTED

也许还可以说出主要升级的顺序。如果是早期版本(例如,在InstallInitialize前后),则升级基本上是先卸载较旧的产品,然后再安装较新的产品,如果您看到的是升级,则可能与文件的删除有关。

答案 1 :(得分:1)

  

菲尔已经回答了。我要发表几个小时前写的   在出发之前。您指定的条件对我来说看起来不错。   也许我会快速回顾一下可能导致的事情   混乱-例如什么自定义操作何时运行?


重大升级 :重大升级实际上是安装新应用程序版本并结合了旧版本的卸载-可能有不同的卸载计划(卸载旧版本和旧版本)安装新的,或安装新的并卸载旧的)。因此,在进行重大升级操作时, 1) 卸载序列仅针对旧设置 2) 运行新设置仅运行其安装顺序。这对于了解什么时候以及为什么运行自定义操作至关重要。

自定义操作和主要升级 :换句话说:此顺序可能会给自定义操作顺序带来很大的混乱,因为它看起来像是操作实际上是在旧安装程序的卸载序列中运行的,则从新安装程序运行。如果您对排序不了解,那么典型的错误是,如果在立即模式下运行自定义操作,则升级过程中会看到同一操作多次运行-每次安装可能运行两次(总共四次)。

不进行重大升级改造 :如Phil所述,您无法在新设置内添加将在旧设置的卸载序列中运行的自定义操作。该自定义操作必须是原始设置的一部分,或者必须通过较小的升级来添加(该升级将就地升级现有安装,而不是卸载并重新安装它)。

重要

  • UPGRADINGPRODUCTCODE 仅在主要升级过程中要卸载的设置中设置。在正在安装的新版本中未设置
    • 因此,在安装设置中仅在卸载设置中出现条件UPGRADINGPRODUCTCODE 不是真的
  • WIX_UPGRADE_DETECTED 仅在使用WiX的MajorUpgrade元素的设置中进行设置,这些设置检测到在安装过程中已卸载了另一个版本。
    • 条件WIX_UPGRADE_DETECTED在安装设置中为 true ,在卸载设置中为 true

WIX_UPGRADE_DETECTED :要进一步详细说明, WIX_UPGRADE_DETECTED 严格来说不是自定义WiX功能-这是一个WiX标准或约定,用于为升级过程设置内置MSI属性ActionProperty。所有支持重大升级的MSI文件都具有这样的属性,WiX只是以一种标准的方式对其进行命名。该属性在Upgrade table的一栏中设置,并且是安装程序在安装过程中在同一框中找到相关产品(即较低版本(因此将要卸载)的相关产品)时设置的属性。 / p>

WIX_DOWNGRADE_DETECTED :请注意,在使用MajorUpgrade元素的标准WiX编译的MSI中,还有WIX_DOWNGRADE_DETECTED-用于列出发现的产品的属性版本高于正在运行的安装程序。这些将阻止有问题的安装程序的安装-在大多数情况下(除非设置是由安装程序设计者自定义的)。

在升级表中指定的操作属性可以是“任何内容”,但是MajorUpgrade Element“便利功能”以“自动魔术”的方式为您完成了这一操作,这对于大多数目的来说都是有意义的-使用上述内容属性名称 WIX_UPGRADE_DETECTED WIX_DOWNGRADE_DETECTED 。检查已编译的MSI的Upgrade Table,以了解其详细信息。这是一个屏幕截图:

Upgrade Table of compiled WiX MSI


我写了这个其他答案,显示了如何将另一个属性名称(YOURUPGRADEPROPERTY)用作“ ActionProperty”:wix installer update process and confirmation dialog(链接的答案不是建议,仅是演示)。只是一个链接,考虑到现在,对您可能不是很有用。

某些链接