WIX v3.9刻录自定义BA最后卸载相关捆绑包而不是第一个

时间:2015-02-26 20:28:09

标签: wix bootstrapper burn wix3.9

我们最近切换到安装程序的自定义引导程序。这允许用户从要安装的可能模块列表中进行选择(每个模块都是单独的msi)。我们正在进行首次升级并遇到问题。刻录正确升级msi,但它没有正确处理ARP中列出的引导程序。它最后尝试卸载引导程序,但之后失败,因为已经安装了更高版本的引导程序。

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

  

"在计划卸载时,Burn引擎会首先计划所有相关的捆绑包。因此,在删除链式包之前,总是会删除相关的包。

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

[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

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

1 个答案:

答案 0 :(得分:2)

当您安装升级后的捆绑包时,您需要安装它,而不是卸载它。因此,顺序是FireGiant文章为安装指定的:已安装升级的软件包(通常是升级它包含的软件包),并且卸载了相关的软件包(旧软件包)。卸载旧软件包时,它知道它的软件包已经升级,因此只留下它们,只是删除了它自己的注册。

如果您的BA试图阻止降级,则还需要考虑该操作。例如,WixStdBA允许卸载发生如下:

if (m_fDowngrading && BOOTSTRAPPER_ACTION_UNINSTALL < action)