虽然安装的版本高于当前安装的版本,但需要卸载以前的版本并安装较新的版本。而安装较低版本的当前版本需要限制安装。 它有3位数字(1.0.0,2.0.0等)。但我要求4位数版本(1.1.0.1,1.1.0.2等)。 请任何人回答我的问题..
答案 0 :(得分:3)
这是Windows Installer的设计限制。见:
<强>说明强>
ProductVersion的三个字段中至少有一个必须更改为 使用升级表进行升级。任何只更改的更新 包代码,但是ProductVersion和ProductCode保持不变 叫做小更新。提供了三个版本字段 主要是为了方便。例如,如果要更改 ProductVersion,但不想改变主要或次要 版本,您可以更改构建版本。
请注意,Windows Installer仅使用前三个字段 产品版本。如果您在产品中包含第四个字段 版本,安装程序忽略第四个字段。
WiX MajorUpgrade Element有一个名为AllowSameVersionUpgrades的属性:
设置为no(默认值)时,安装具有相同的产品 版本和升级代码(但不同的产品代码)是允许的 被MSI视为两种产品。设置为yes时,WiX设置为 msidbUpgradeAttributesVersionMaxInclusive属性,告诉MSI 处理与主要升级版本相同的产品。
当两个产品版本仅在第四个版本中有所不同时,这非常有用 版本字段。 MSI在比较时特别忽略了该字段 产品版本,所以两个产品只在第四个不同 version字段是相同的产品,需要将此属性设置为yes 被发现。
请注意,因为MSI忽略了第四个产品版本字段, 将此属性设置为yes也允许在第一个时降级 三个产品版本字段完全相同。例如,产品 版本1.0.0.1将&#34;升级&#34; 1.0.0.2998因为他们被视为 相同版本(1.0.0)。这可能会重新引入严重的错误 最安全的选择是更改前三个版本字段并省略 此属性将获取默认值no。
此属性不能是&#34;是&#34;当AllowDowngrades也是&#34;是&#34; - AllowDowngrades已经允许两个版本相同的产品 号码互相升级。
现在有办法让两全其美。它涉及编写在FindRelatedProducts action之后安排的自定义操作,以调用MsiEnumRelatedProducts function来查询MSI并识别仅与第四个字段不同的已安装产品,并且少于您的新产品版本。然后将其添加到升级行中指定的ActionProperty中,让RemoveExistingProducts Action完成剩下的工作。