有谁知道:
如何在安装新版本的设置之前强制wix安装程序卸载以前安装的任何先前副本,无论是次要版本还是主要版本。
如果1)在运行新的次要/主要设置时无法完成,我是否至少可以显示一条消息,说明检测到以前的版本,应首先将其卸载并取消设置?
感谢。
更新:
我已将以下内容添加到我的settings.wxi
中<Upgrade Id="$(var.UpgradeCode)">
<!-- Populate NEWERPRODUCTFOUND if there is an installed
package with the same upgrade code
and version is > the version being installed -->
<UpgradeVersion
Minimum="$(var.CurrentVersion)"
IncludeMinimum="no"
OnlyDetect="yes"
Language="1033"
Property="NEWERPRODUCTFOUND" />
<!-- Populate UPGRADEFOUND if there is an installed
package with the same upgrade code
and the version is between the earliest version defined
and the version being installed -->
<UpgradeVersion
Minimum="$(var.FirstVersion)"
IncludeMinimum="yes"
Maximum="$(var.CurrentVersion)"
IncludeMaximum="no"
Language="1033"
Property="PREVIOUSVERSIONSINSTALLED" />
</Upgrade>
我在MyProduct.wxs
中定义了以下内容<?define CurrentVersion="5.0.0.18"?>
<?define FirstVersion="1.0.0.0"?>
<?define UpgradeCode="c1b1bfa0-9937-49eb-812c-5bac06eff858"?>
最后,我已将此添加到我的<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
但是当我将我的版本增加到5.0.0.19时,它仍然没有删除旧版本。
也许我以错误的方式看待这个问题,但在我的&#34;添加/删除程序&#34;窗口,我看到我的设置列为5.0.0.18,我看到第二个条目为5.0.0.19
每次更改版本时,是否应该更改升级代码?我以为我读过这个永远不应该改变。
有什么想法吗?
感谢。
答案 0 :(得分:16)
经过大量的谷歌搜索,我找到了答案! Windows Installer没有考虑我使用的版本的4号,即5.0.0.18。
它只查看制作版本号的前3组数字。一旦我将我的版本更改为5.0.18.0到5.0.19.0,它立即使用问题中发布的代码,它删除了以前的版本并在其上安装了新版本。
请注意,我实际上删除了上面的代码并最终使用了MajorUpgrade,因为它就是我所需要的:
<MajorUpgrade
AllowDowngrades="no"
AllowSameVersionUpgrades="no"
IgnoreRemoveFailure="no"
DowngradeErrorMessage="loc.NewerVersionInstalled"
Schedule="afterInstallInitialize"/>
希望这有助于其他人!
答案 1 :(得分:4)
以下是AllowSameVersionUpgrades
元素的MajorUpgrade
属性的文档。它包含相关信息。重点是我的。
设置为no(默认值)时,安装具有相同的产品 版本和升级代码(但不同的产品代码)是允许的 被MSI视为两种产品。设置为yes时,WiX设置为
msidbUpgradeAttributesVersionMaxInclusive
属性,告诉MSI 处理与主要升级版本相同的产品。当两个产品版本仅在第四个版本中有所不同时,这非常有用 版本字段。 MSI在比较时特别忽略了该字段 产品版本,所以两个产品只在第四个不同 version字段是相同的产品,需要将此属性设置为yes 被发现。
请注意,因为MSI忽略了第四个产品版本字段, 将此属性设置为yes也允许在第一个时降级 三个产品版本字段完全相同。例如,产品 版本1.0.0.1将“升级”1.0.0.2998因为它们被视为 相同版本(1.0.0)。这可能会重新引入严重的错误 最安全的选择是更改前三个版本字段并省略 此属性将获取默认值no。
当
AllowDowngrades
也是“是”时,此属性不能为“是” -AllowDowngrades
已经允许两个版本相同的产品 号码互相升级。
将此属性设置为yes
可能不,但是,根据第三段,版本5.0.0.18将被视为对5.0版本的升级。 0.19。将此属性设置为no
,并使用第三个产品版本字段仅允许升级。