0

在不同的地方,我读过类似于“如果特定用户没有安装您的产品的早期版本,则打包为完整 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 属性中的相同。我确定在升级元素中我应该做些什么,但谁能告诉我什么?

4

2 回答 2

2

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

因此 Windows Installer 将 5.0.0.1 视为与 5.0.0.30 相同的版本。

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

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

于 2013-02-27T10:11:15.877 回答
2

StackOverflow 是否会授予“在惊呼我是白痴时击中额头”徽章?

问题与我所寻找的地方相去甚远。只是为了让其他寻找我问题答案的人来到这里,真正的答案是包括我在问题中提到的那个元素(显然是针对您的特定情况修改了 ID 和版本号)。

我的包裹也有

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

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

于 2013-02-28T16:16:19.657 回答