【问题标题】:WIX v3.9 Burn custom BA uninstalls related bundles last instead of firstWIX v3.9 Burn custom BA 最后而不是第一个卸载相关捆绑包
【发布时间】:2015-02-26 20:28:08
【问题描述】:

我们最近为我们的安装程序切换到了自定义引导程序。这允许用户从可能安装的模块列表中进行选择(每个模块都作为单独的 msi)。我们现在正在进行第一次升级并遇到了问题。 Burn 可以正确升级 msi,但无法正确处理 ARP 中列出的引导程序。它最后尝试卸载引导程序,但由于已经安装了更高版本的引导程序而失败。

根据这篇文章https://support.firegiant.com/entries/24024208-Bundle-chain-execution-order-升级的执行顺序应该首先卸载相关的捆绑包:

“在计划卸载时,Burn 引擎首先计划所有相关的包。因此,相关的包总是在删除链接的包之前被删除。

但是,这不是我们看到的行为。最后卸载了相关的bundle:

[11C4:0868][2015-02-26T10:09:26]i102: Detected related bundle: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, type: Upgrade, scope: PerMachine, version: 7.5.0.0, operation: MajorUpgrade
...
[11C4:0868][2015-02-26T10:09:38]i207: Planned related bundle: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, type: Upgrade, default requested: Absent, ba requested: Absent, execute: Uninstall, rollback: Install, dependency: None
[11C4:0868][2015-02-26T10:09:38]i299: Plan complete, result: 0x0
...
[1224:0E20][2015-02-26T10:23:26]i301: Applying execute package: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, action: Uninstall, path: C:\ProgramData\Package Cache\{9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}\FlexSimInstaller.exe, arguments: '"C:\ProgramData\Package Cache\{9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}\FlexSimInstaller.exe" -uninstall -quiet -burn.related.upgrade -burn.ancestors={36ff969e-da98-4c27-9dde-20e090c0812f}'
[11C4:0868][2015-02-26T10:23:35]i319: Applied execute package: {9e3abad2-c78b-48ec-a523-c5c4de4fe3f1}, result: 0x0, restart: None
[11C4:0868][2015-02-26T10:23:35]i399: Apply complete, result: 0x0, restart: None, ba requested restart:  No
[11C4:0868][2015-02-26T10:23:38]i500: Shutting down, exit code: 0x0

我们知道无法更改订单,那么如何让升级生效?

【问题讨论】:

    标签: wix bootstrapper burn wix3.9


    【解决方案1】:

    当您安装升级的捆绑包时,您是在安装它,而不是卸载它。所以顺序是 FireGiant 文章指定的安装:安装升级的包(通常升级它包含的包)并卸载相关的包(旧包)。当旧的包被卸载时,它知道它的包已经升级,所以它不理会它们,只是删除它自己的注册。

    如果您的 BA 试图阻止降级,它还需要考虑采取的措施。例如,WixStdBA 让卸载发生如下:

    if (m_fDowngrading && BOOTSTRAPPER_ACTION_UNINSTALL < action)
    

    【讨论】:

    • 有道理,谢谢。听起来我的原始安装程序(向全世界发布)被劫持了,我需要修复未来版本的升级。如果我是对的,我认为我需要: 在旧捆绑包中,检测相关捆绑包,如果相关捆绑包是升级包,则调用 Engine.Plan(LaunchAction.Uninstall);计划卸载并应用,然后退出卸载。
    • 打开旧包卸载会导致 UI 打开,有没有办法抑制它?
    • Burn 使用 -quiet 和 -uninstall 开关自动运行旧包。这将在命令对象中传递给您。
    猜你喜欢
    • 2012-02-11
    • 2017-03-04
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多