如何在 Wix 自定义引导程序应用程序中进行捆绑更新?

How to do bundle update in Wix custom bootstrapper application?

我正在尝试对使用自定义引导程序应用程序的捆绑包进行更新,但我不知道该怎么做。起初我试图将 BA UpdateReplace 设置为 LaunchAction,但它根本不起作用。阅读 this 后,我尝试使用 Install as LaunchAction。

我正在尝试增加捆绑包的版本,UpgradeCode 已修复。 bundle 中的所有内容都是固定的,只有 Version 发生了变化。

新捆绑包的日志文件分为两部分。第一部分检测现有包和相关包(旧版本,操作:MajorUpgrade),计划包和旧包的卸载。然后先以这一行结束日志:

Applying execute package: {9b21f135-98c9-4126-bd07-2b64c9aaa6f5}, action: Uninstall, path: C:\ProgramData\Package Cache\{9b21f135-98c9-4126-bd07-2b64c9aaa6f5}\Bootstrapper.exe, arguments: '"C:\ProgramData\Package Cache\{9b21f135-98c9-4126-bd07-2b64c9aaa6f5}\Bootstrapper.exe" -uninstall -quiet -burn.related.upgrade -burn.ancestors={c641576c-eee6-47c9-bf0c-00c42e8ff5c1} -burn.filehandle.self=984'

第二个日志文件包含以下信息:

Burn v3.11.1.2318, Windows v10.0 (Build 17763: Service Pack 0), path: C:\ProgramData\Package Cache\{9b21f135-98c9-4126-bd07-2b64c9aaa6f5}\Bootstrapper.exe
Initializing string variable 'Var1' to value 'false'
Initializing string variable 'Var2' to value 'false'
This bundle is being run by a related bundle as type 'Upgrade'.
Command Line: '"-burn.clean.room=C:\ProgramData\Package Cache\{9b21f135-98c9-4126-bd07-2b64c9aaa6f5}\Bootstrapper.exe" -burn.filehandle.attached=616 -burn.filehandle.self=632 -uninstall -quiet -burn.related.upgrade -burn.ancestors={c641576c-eee6-47c9-bf0c-00c42e8ff5c1} -burn.filehandle.self=984 -burn.embedded BurnPipe.{6DD039C2-BF8D-4A6E-B96B-3EA4784A1B37} {7B93845A-F588-4A34-97FD-8243D81D5B26} 7948'
Setting string variable 'WixBundleLog' to value 'C:\Users\BALAKI~1.ELE\AppData\Local\Temp\Производственная_система_20200312142440.log'
Setting string variable 'WixBundleManufacturer' to value 'Kirumata'
Loading managed bootstrapper application.
Creating BA thread to run asynchronously.

仅此而已。没有异常或错误。

在程序和功能中存在两个不同版本的包。因此,据我了解,安装了新版本,但未删除旧版本。

问题是:这里发生了什么以及如何让它发挥作用?

好的,终于找到管理更新的方法了

首先,我们需要创建具有相同 UpgradeCode 但更高版本的新 Bundle。我们需要在 Bundle bootstrapp 应用程序中启动 LaunchAction = Install。

Burn 将安装新的 Bundle,然后卸载旧版本。那就是关键:自定义BA的方法运行()会被重启,但是第二次启动会处于静默模式。所以我们需要通过 UI 和静默模式来管理安装。像这样:

     if (this.Command.Display == Display.Full)
                {
                    //UX
                    view.Show(); 
                }

                else
                {
                    //Some kind of silent installation
                    model.PlanAction(this.Command.Action);
                    model.ApplyAction();
                }