使用WIX想要创建一个包,它将更新现有安装并首次安装该应用程序

时间:2013-02-27 10:03:23

标签: wix

在各个地方,我读过类似于&#34的声明;更新打包为 如果a,完整的MSI包可以作为首次安装 特定用户没有早期版本的产品 安装"

但事实证明这很难做到。

我有一个安装包很好。但是当我在下面添加升级元素时,它不会再进行第一次安装。

<Upgrade Id="DE3F65C6-FAAF-4FE0-8D3A-87E4A1F5E36F">
    <UpgradeVersion OnlyDetect="no" Minimum="4.1.0.0" IncludeMinimum="yes" Maximum="5.0.0.7" IncludeMaximum="no" Property="PREVIOUSVERSIONFOUND" />
</Upgrade>

上面的Id与Product元素的UpgradeCode属性中的相同。我确定在升级元素中我应该做些什么,但有人可以告诉我什么吗?

2 个答案:

答案 0 :(得分:2)

您可能会在此处看到的一个潜在问题是Windows Installer只关心版本号中的前3个值。微软称第四个数字纯粹是用于内部构建跟踪,因此发布的安装程序不应该关心它。

因此,Windows Installer将5.0.0.1看作与5.0.0.30相同的版本。

此外,除非您需要某种复杂的升级逻辑,否则我建议可能使用MajorUpgrade元素,因为它消除了编写将执行标准主要升级的包的许多痛苦。可以在here

找到相关文档

另一个令人困惑的事实可能是,虽然在幕后,安装程序基本上将重大升级视为卸载,然后重新安装,您设置的UI可能不会以相同的方式运行,特别是如果您只是使用默认的UI对话框之一。

答案 1 :(得分:2)

StackOverflow是否会奖励“在惊呼我是一个白痴”徽章时“击中前额?”

问题远不及我所看到的地方。只是为了让其他人在寻找我的问题的答案来到这里,真正的答案是包括我在我的问题中提到的那个元素(显然是根据你的特定情况修改了Id和版本号)。

我的包也有

    <InstallExecuteSequence>
        <RemoveExistingProducts Before="InstallInitialize" />
    </InstallExecuteSequence>

这可能不是绝对必要的,但它确实有效。