我可以使用 WiX 创建一个 MSI 来升级使用 Burn Bootstrapper 安装的应用程序吗?

Posted

技术标签:

【中文标题】我可以使用 WiX 创建一个 MSI 来升级使用 Burn Bootstrapper 安装的应用程序吗?【英文标题】:Can I create an MSI with WiX that upgrades an application installed using a Burn Bootstrapper? 【发布时间】:2013-09-11 10:42:56 【问题描述】:

假设我有一个使用由 WiX Bootstrapper 项目创建的 Setup.exe 安装的应用程序。我现在有一个希望用户升级到的应用程序的新版本,但出于各种原因,我希望将此升级作为 MSI,而不是 .exe 分发。

当我对此进行测试时,我发现我最终在添加/删除程序中显示了 2 个应用程序实例,一个是 .exe 安装的版本,一个是 .msi 安装的版本。

我注意到 Setup 项目中的 Product 元素和 Bootstrapper 项目中的 Bundle 都具有不同的 UpgradeCode 属性。我确实尝试使用与要测试的 Bundle 相同的 UpgradeCode 创建一个 MSI,但这显示的行为与以前相同。

有没有办法使用 MSI 升级安装了 Setup.exe 的产品?

【问题讨论】:

这个问题是捆绑与 MSI 不同。它们没有在 Windows Installer 中注册,也不一定需要出现在 ARP 中。是否有一个具体的原因为什么您不只是让您的捆绑包安装这个 MSI? 你终于解决了这个问题吗?我遇到了完全相同的问题:/ 【参考方案1】:

使用与您使用引导程序安装的 MSI 相同的升级代码创建新的 MSI。如果 MSI 升级代码相同,那么它会根据您在 MSI 中提到的内容知道它们是相关产品并执行(卸载旧版本、升级等)。

【讨论】:

这正是我所做的,但没有成功。我相信这是因为在 Windows Installer 基础结构中注册的升级代码实际上是引导程序 元素的升级代码。 根据您在上面写的内容“我注意到 Setup 项目中的 Product 元素和 Bootstrapper 项目中的 Bundle 都具有不同的 UpgradeCode 属性。” 我了解到您的 MSI 升级与 Bundle/bootstrapper 的升级相同。那不是我说的。我的意思是使新的 MSI 升级代码与您的 bundle/bootstrapper 中的 MSI 升级完全相同(而不是 bundle/bootstrappers 升级代码)。你明白我的意思吗? @Isaiah4110 - 仍然无法摆脱旧捆绑包。它将升级 MSI,这是正确的,但捆绑包中的旧条目仍将保留。 检查这个答案,编写一个脚本从注册表中删除捆绑条目:***.com/questions/18109387/…

以上是关于我可以使用 WiX 创建一个 MSI 来升级使用 Burn Bootstrapper 安装的应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WiX 和 MSI 进行静默安装和卸载?

Wix Custom BA 正确处理升级

Wix静默安装MSI我们可以停止创建目录吗

如何设置 wix msi 以运行管理员广告

WiX MSI 和 EXE 作为一个 EXE

如何在 Wix Bundle 中引用动态命名的 MSI 文件