我正在使用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等。
答案 0 :(得分:6)
wixstdba今天不显示动作数据进度消息。有人在谈论在wix-devs邮件列表中添加该功能,但尚未发生。这只是将你在托管案例中的代码添加到wixstdba(尚未拥有它)的问题。
如果您只想以wixstdba的方式显示正在安装的软件包的名称,那么您将需要处理Engine.OnCachePackageBegin()
和Engine.ExecutePackageBegin()
回调。这些回调告诉您何时开始下载并随后安装包。作为回调的参数的一部分,您将获得包ID。
要获取友好的显示名称,您可以阅读Bootstrapper Application .dll旁边自动包含的BootstrapperApplicationData.xml
。在WixPackageProperties
个元素中提供了有关包中包的大量信息,包括DisplayName
。
---抱歉,以下是对未提问的问题的答案。 ---
当Windows Installer显示消息(如操作数据或提示用户输入的请求)时,将调用Engine.ExecuteMsiMessage()
回调。通过三种不同的回调提供进展。
您可以通过Engine.Progress
回调获得整体进度。这是一个非常粗糙的进度,基本上随着每个包的缓存和执行而移动。
您可以通过Engine.CacheAcquireProgress
获取整体和单个套餐的进度。当每个包被下载/复制并验证放置在包缓存中时,这一进展就会发生。
您可以通过Engine.ExecuteProgress
回调获取整体和单个套餐的进度。在安装/修复/卸载每个软件包时,此进度会发生变化。
因此,Engine.Progress
向您显示总体进度总数,并且对于单个进度条非常容易使用,但进度条不会非常顺利地移动。通过将Engine.CacheAcquireProgress
添加到Engine.ExecuteProgress
,您可以获得更顺畅的整体进度。注意:这将为您提供一个到200的进度条。
您可以在src\Setup\WixBA\ProgressViewModel.cs
文件中查看WixBA如何处理所有这些内容。