Wix安装 - 使用Burn来管理UI并将相同的进度文本显示为内置对话框

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wix安装 - 使用Burn来管理UI并将相同的进度文本显示为内置对话框相关的知识,希望对你有一定的参考价值。

我正在使用Wix Burn来安装我们项目的必备条件,我使用ManagedBootstrapperApplicationHost来获得自定义UI,我一直在关注Wix源代码中的项目来创建我的托管WPF应用程序。

现在的问题是它显示的Progress(消息)与我们在内置UI中使用的进度消息不匹配--WixStandardBootstrapperApplication.RtfLicense

基本上我使用Wix源代码中的以下代码

 private void ExecuteMsiMessage(object sender, ExecuteMsiMessageEventArgs e)
        {
            lock (this)
            {
                this.Message = e.Message;
                e.Result = this.root.Canceled ? Result.Cancel : Result.Ok;
            }
        }

如何使用与普通进度对话框相同的显示...我是否必须单独设置来自其他方法的消息,如PlanPackage等。

答案

wixstdba今天不显示动作数据进度消息。有人在谈论在wix-devs邮件列表中添加该功能,但尚未发生。这只是将你在托管案例中的代码添加到wixstdba(尚未拥有它)的问题。

如果您只想以wixstdba的方式显示正在安装的软件包的名称,那么您将需要处理Engine.OnCachePackageBegin()Engine.ExecutePackageBegin()回调。这些回调告诉您何时开始下载并随后安装包。作为回调的args的一部分,您将获得包ID。

要获得友好的显示名称,您可以阅读自动包含在Bootstrapper Application .dll旁边的BootstrapperApplicationData.xml。在有WixPackageProperties元素,提供有关包中的包的大量信息,包括DisplayName

---对不起,以下是对未提问的问题的答案。 ---

当Windows Installer显示消息(如操作数据或提示用户输入的请求)时,将调用Engine.ExecuteMsiMessage()回调。通过三种不同的回调提供进展。

  1. 您可以通过Engine.Progress回调获得整体进度。这是一个非常粗糙的进度,基本上随着每个包的缓存和执行而移动。
  2. 您可以通过Engine.CacheAcquireProgress获得整体和单个包装进度。在每个包下载/复制并验证放置在包缓存中时,此进展会发生变化。
  3. 您可以通过Engine.ExecuteProgress回调获得整体和单个包的进度。安装/修复/卸载每个软件包时,此进度会发生变化。

因此,Engine.Progress向您显示总体进度,并且对于单个进度条非常容易使用,但进度条不会非常顺利地移动。通过将Engine.CacheAcquireProgress添加到Engine.ExecuteProgress,您可以获得更顺畅的整体进度。注意:这将为您提供一个到200的进度条。

您可以在srcSetupWixBAProgressViewModel.cs文件中看到WixBA如何处理所有这些。

以上是关于Wix安装 - 使用Burn来管理UI并将相同的进度文本显示为内置对话框的主要内容,如果未能解决你的问题,请参考以下文章

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

WiX 自定义操作在 MSI 中使用 [SourceDir] 和 Burn

自定义 WiX Burn 引导程序用户界面?

Wix Burn exepackage 属性

WiX Burn:如何将安装程序可执行文件部署到某个位置?

WiX Burn 重启后/强制重启继续安装