我刚刚根据上一个问题/答案更新了我们的 wix 安装脚本如何实施 WiX 安装程序升级?. 这个想法是为了防止旧版本“降级”新版本。所以我有部分 wix 文件看起来像:
<Product Id="A_GUID"
<Upgrade Id="18626be5-521c-4b58-ab8a-54baddf66679">
<UpgradeVersion
Property="NEWERVERSIONDETECTED"
Minimum="$(var.Version)"
IncludeMinimum="no"
OnlyDetect="yes"
ExcludeLanguages="yes"
/>
</Upgrade>
<CustomAction Id="NewerVersionFound" Error="Can't downgrade." />
<InstallExecuteSequence>
<Custom Action="NewerVersionFound"
After="FindRelatedProducts">NEWERVERSIONDETECTED</Custom>
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>
我有两个版本,比如 2.1 和 2.2。当前的做法是保持 Product Id Guid(如上面的“A_GUID”)对于次要版本(如 2.x)相同,并且只更改主要版本 - 因此从 1.x 移动到 2.x 我们更改了 Guid .
但是,如果 2.1 和 2.2 的 Product Guid 保持不变,尽管 '$(var.Version)' 发生了变化,上述方法将不起作用。如果我更改 Guid,它确实有效(并防止降级 2.2 -> 2.1)。
我想知道为什么会这样(假设我做得正确) - 为什么我们需要两位信息(guid 和版本)才能工作?
Edit1a:wix 中有一个 UpgradeCode Guid,每个版本都保持相同。Edit1b:如果相关,这是使用旧版本的 wix (2.x) 完成的。