在wix中卸载旧版本的4位数字,例如1.1.0.1

Kat*_*hir 3 installation wix uninstallation

当安装比当前安装的版本更高的版本时,需要卸载以前的版本并安装较新的版本。并且当安装比当前版本低的版本时需要限制安装。它可用于 3 位数字(1.0.0、2.0.0 等)。但我要求 4 位数字版本(1.1.0.1、1.1.0.2 等)。请任何人回答我的问题..

Chr*_*ter 5

这是 Windows Installer 的设计限制。看:

产品版本属性

评论

要使用升级表进行升级,必须更改 ProductVersion 的三个字段中的至少一个。任何仅更改包代码但保持 ProductVersion 和 ProductCode 不变的更新称为小更新。提供三个版本字段主要是为了方便。例如,如果您想要更改 ProductVersion,但不想更改主要版本或次要版本,则可以更改构建版本。

请注意,Windows Installer 仅使用产品版本的前三个字段。如果您的产品版本中包含第四个字段,安装程序将忽略第四个字段。

WiX MajorUpgrade 元素有一个名为AllowSameVersionUpgrades 的属性:

当设置为 no(默认值)时,允许安装具有相同版本和升级代码(但产品代码不同)的产品,并被 MSI 视为两个产品。当设置为 yes 时,WiX 会设置 msidbUpgradeAttributesVersionMaxInclusive 属性,该属性告诉 MSI 将相同版本的产品视为主要升级。

当两个产品版本仅在第四个版本字段不同时,这非常有用。MSI 在比较产品版本时特别忽略该字段,因此仅第四个版本字段不同的两个产品是同一产品,需要将此属性设置为 yes 才能检测到。

请注意,由于 MSI 忽略第四个产品版本字段,因此将此属性设置为 yes 也允许在前三个产品版本字段相同时进行降级。例如,产品版本 1.0.0.1 将“升级”1.0.0.2998,因为它们被视为相同的版本 (1.0.0)。这可能会重新引入严重的错误,因此最安全的选择是更改前三个版本字段并忽略此属性以获得默认值“否”。

当AllowDowngrades 也为“yes”时,此属性不能为“yes”——AllowDowngrades 已允许具有相同版本号的两个产品相互升级。

现在有一种方法可以两全其美。它涉及编写一个自定义操作(安排在FindRelatedProducts 操作之后),以调用MsiEnumRelatedProducts 函数来查询 MSI 并识别仅第四个字段不同且低于新产品版本的已安装产品。然后,将其添加到升级行中指定的 ActionProperty 中,并让RemoveExistingProducts 操作完成其余的工作。