我正在尝试使用在InstallInitialise
和InstallFinalize
标准动作之间安排的自定义动作来删除文件。
MajorUpgrade element
用于设计升级。
但是,我希望自定义操作仅在卸载期间运行,而不在主要升级(包括卸载和安装)期间运行。
我使用以下条件来执行CUstom动作:
(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")
REMOVE AND NOT WIX_UPGRADE_DETECTED
是否有一种方法可以使用Wix中的属性唯一地检测主要升级?
答案 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,以了解其详细信息。这是一个屏幕截图:
我写了这个其他答案,显示了如何将另一个属性名称(YOURUPGRADEPROPERTY
)用作“ ActionProperty
”:wix installer update process and confirmation dialog(链接的答案不是建议,仅是演示)。只是一个链接,考虑到现在,对您可能不是很有用。
某些链接 :