我正在使用 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 等)单独设置消息..
最佳答案
wixstdba 今天不显示操作数据进度消息。有人讨论在 wix-devs 邮件列表中添加该功能,但这还没有发生。只需将托管案例中的代码添加到 wixstdba(还没有)即可。
如果您只想按照 wixstdba 的方式显示正在安装的包的名称,那么您需要处理 Engine.OnCachePackageBegin()
和 Engine.ExecutePackageBegin ()
回调。这些回调会告诉您软件包何时开始下载并分别安装。作为这些回调参数的一部分,您将获得包 ID。
要获取友好的显示名称,您可以读取自动包含在 Bootstrapper Application.dll 旁边的 BootstrapperApplicationData.xml
。其中的 WixPackageProperties
元素提供了有关 bundle 中的包的大量信息,包括 DisplayName
。
--- 抱歉,以下是对未提出问题的回答。 ---
当 Windows Installer 显示消息(例如操作数据或提示用户输入的请求)时,将调用 Engine.ExecuteMsiMessage()
回调。进度通过三个不同的回调提供。
您可以通过
Engine.Progress
回调获取总体进度。这是一个非常粗粒度的进度,基本上随着每个包的缓存和执行而移动。您可以通过
Engine.CacheAcquireProgress
获取整体和单个包的进度。当下载/复制每个包并验证是否将其放置在包缓存中时,此进度就会移动。您可以通过
Engine.ExecuteProgress
回调获取整体和单个包的进度。此进度随着每个软件包的安装/修复/卸载而移动。
因此,Engine.Progress
显示了总的整体进度,对于单个进度条来说非常易于使用,但进度条不会移动得很顺畅。您可以通过将 Engine.CacheAcquireProgress
添加到 Engine.ExecuteProgress
来获得更平滑的整体进度。注意:这将使您的进度条达到 200。
您可以在 src\Setup\WixBA\ProgressViewModel.cs
文件中了解 WixBA 如何处理所有这些。
关于Wix 安装 - 使用 Burn 来管理 UI 并显示与内置对话框相同的进度文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872126/