我刚刚根据上一个问题/答案How to implement WiX installer upgrade?更新了我们的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)保持相同,并且仅为更改为major - 因此从1.x移动到2.x我们更改Guid
但是,尽管'$(var.Version)'改变了,但如果Product Guid在2.1和2.2中保持不变,则上述方法不起作用。如果我更改Guid,它确实有效(并防止降级2.2 - > 2.1)。
我想知道为什么会这样(假设我正确地做了) - 为什么我们需要两位信息(guid和版本)来实现这个目的?
Edit1a:wix中有一个UpgradeCode Guid,每个版本保持不变。 Edit1b:如果它是相关的,这是使用旧版本的wix(2.x)完成的。
答案 0 :(得分:4)
与产品指南无关。
它始终与您在产品节点上指定为属性的UpgradeCode相关。
<Product Id="*" Name="name" Version="$(var.Version)" UpgradeCode="12345678-55F7-4731-A318-772EF75D2830">
在升级节点中,您正在寻找升级代码(而不是产品guid)。 您可以指定乘法升级代码以查找软件的不同版本。但是升级代码通常应该在产品中保持不变。请参阅MS主页上的最佳做法。
<Upgrade Id="12345678-55F7-4731-A318-772EF75D2830">
<UpgradeVersion ExcludeLanguages="no" Property="OLDVERSIONFOUND"
IgnoreRemoveFailure="yes" MigrateFeatures="no" IncludeMinimum="no"
Minimum="0.0.0.0" Maximum="$(var.Version)" IncludeMaximum="no"
/>
<UpgradeVersion OnlyDetect="yes" Property="NEWAPPFOUND" IncludeMinimum="yes" Minimum="$(var.Version)" Maximum="99.99.99.99" />
</Upgrade>
通过自定义操作(您已经拥有),您可以做出反应。
<CustomAction Id="OldAppFound" Error="Newer app of [ProductName] is installed" />
你需要安排序列中的测试(你也做过)
<InstallExecuteSequence>
<Custom Action="OldAppFound" After="FindRelatedProducts">NEWAPPFOUND</Custom>
</InstallExecuteSequence>
<InstallUISequence>
<Custom Action="OldAppFound" After="FindRelatedProducts">NEWAPPFOUND</Custom>
</InstallUISequence>
如有必要,请删除旧的(您的代码中也有)
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>