5

我正在使用 Wix Burn 来安装我们项目的每个必需品,我已经使用ManagedBootstrapperApplicationHost来拥有自定义 UI,我一直在关注来自 Wix 源代码的项目来创建我的托管 WPF 应用程序。

现在的问题是它显示的进度(消息)与我们使用内置 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 等)单独设置消息。

4

1 回答 1

6

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

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

要获得友好的显示名称,您可以阅读BootstrapperApplicationData.xml引导程序应用程序 .dll 旁边自动包含的名称。其中有一些WixPackageProperties元素提供了有关捆绑包中包的大量信息,包括DisplayName.

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

Engine.ExecuteMsiMessage()Windows 安装程序显示消息(如操作数据或提示用户输入的请求)时调用回调。进度是通过三个不同的回调提供的。

  1. Engine.Progress您可以通过回调获得整体进度。这是一个非常粗粒度的进展,基本上随着每个包的缓存和执行而移动。

  2. 您可以通过Engine.CacheAcquireProgress. 这个进度随着每个包被下载/复制并被验证放置在包缓存中而移动。

  3. Engine.ExecuteProgress您可以通过回调获取整体和单个包的进度。这个进度随着每个软件包的安装/修复/卸载而移动。

因此,它Engine.Progress向您显示了总的整体进度,并且对于单个进度条非常易于使用,但进度条不会移动得很顺利。您可以通过Engine.CacheAcquireProgressEngine.ExecuteProgress. 注意:这会给你一个到 200 的进度条。

您可以在文件中看到 WixBA 如何处理所有这些src\Setup\WixBA\ProgressViewModel.cs

于 2013-04-08T13:46:33.630 回答