wix - 强制 WiX Burn Bootstrap 允许 MSI 文件使用 REINSTALLMODE=amus

标签 wix burn

由于在设计和实现我们的构建过程时我不是公司的一员(并且现在已经成功了好几年),所以我发现有些正在做的事情可以查看作为 MSI“纯粹主义者”的“骇客”。但是,为了使用 Visual Studio 2012 获得可用的安装程序,我一直在尽我所能模仿对 Visual Studio 2010 中的 .vdproj 文件所做的事情。 .在我遇到的许多障碍中,这似乎是我无法解决的最后一个。

作为我们使用 Visual Studio 2010 构建过程的一部分,我们构建了我们的代码并在一个 VM 上创建了一个框架 MSI。然后我们采用该框架 MSI 并将其安装在不同的 VM 上。安装框架后,我们构建了我们的产品代码并从中创建了一个产品 MSI。这创建了对我们框架的产品依赖。这意味着在客户端机器上安装时, Bootstrap 需要先安装框架,然后再安装产品。在卸载时,我们的文档声明通过 ARP 或命令行 'msiexec/x {Product.msi/@ProductCode}' 处理它,然后是 'msiexec/x {Framework.msi/@ProductCode'.

当时,管理层确定 ProductCode 将是其他产品团队确定我们的产品是否已安装在机器上的最简单方法。这导致他们决定需要为框架和产品保留静态 ProductCode

为了处理升级,他们必须创建一个 ProductTool.exe,它只不过是包装在一个采用 /ProductCode={@ProductCode} 的可执行文件中的 msiexec参数。

作为我们 Bootstrap 的一部分,他们调用了:

  • 安装先决条件(Windows Installer 4.5、.NET 3.5 SP1、SQL Server 2008 R2 Express、Sync 2.1)
  • ProductTool.exe(Product.msi -- 卸载 Product.msi)
  • ProductTool.exe(Framework.msi -- 卸载 Framework.msi)
  • 安装Framework.msi
  • 安装Product.msi

但是,直到最近我才发现 Burn Bootstrap 不允许 REINSTALLMODE=amus。在安装日志中,它表示将其更改为 REINSTALLMODE=vomus。显然,为了让上述过程在升级时起作用,他们必须设置 REINSTALLMODE=amus

更新:我终于与安装程序的原始开发人员交谈,发现 REINSTALLMODE=amus 被故意用于还原所有版本化文件(程序集、DLL 文件等)和非版本控制文件(.config、SQL 脚本等)作为风险最小化和稳健性/“ self 修复”策略。

综上所述,是否有可能使用标准的刻录引导应用程序 (BA) 设置 REINSTALLMODE=amus 以便我可以进行升级? MSI 文件设置了属性,但 Burn 似乎覆盖了它。

最佳答案

不,今天的 Burn 引擎不支持它。 Burn 非常小心地控制 REINSTALLMODE 以正确处理升级和修复。在 REINSTALLMODE 中使用 a 远非最佳实践,因此不受支持。此外,不清楚为什么 a 在您描述的场景中是必需的。

关于wix - 强制 WiX Burn Bootstrap 允许 MSI 文件使用 REINSTALLMODE=amus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16860266/

相关文章:

WIX Bundle Installer,选择要安装的包

WiX Burn Bootstrapper 本地化

wix WixStdbaLicenseUrl 在使用自定义主题时不会隐藏许可证

维克斯燃烧 : How to stop Bootstrapper from installing itself

wix - SCCM 的 .msi 和 .exe 安装程序是否有任何要求?

WiX - 如何有条件地设置属性

wix - 安装 WIX Bootstrapper 后提示 Reboot 消息

具有自定义安装位置的 Wix 捆绑卸载包

wix - 以管理员身份运行启动时的快捷方式

wix - 如何使用构建配置更改 .wxs 文件中的 url