创作 ProgressBar 控件
Windows Installer 包含用于在操作显示对话框中显示进度指示器的功能。 ProgressBar 控件以图形方式表示各个组件的安装,并报告相对于剩余时间的已用总时间或安装完成之前的近似总剩余时间。
为了确定安装的预期总时间,安装程序会跟踪生成执行脚本期间每个操作预期的总进度时钟周期。 脚本生成完成后,将存储进度时钟周期总计,并开始安装。
在执行脚本中的每个操作时,详细描述已用进度时钟周期数的进度消息将发送到活动消息处理程序。 在每条进度消息上,安装程序都会将 SetProgress ControlEvent 广播到当前活动对话框。 应创作 UI 序列以在脚本执行期间创建操作显示对话框,以便从安装程序接收 SetProgress ControlEvent 消息。
当操作显示对话框收到 SetProgress ControlEvent 时,它会在 EventMapping 表中检查任何订阅 ControlEvent 的控件。 操作显示对话框中的 ProgressBar 控件使用在 Attributes 列中指定的 Progress 控件属性进行订阅。 Progress Control 属性指定 ProgressBar 控件将与 SetProgress ControlEvent 一起被传递“ticksSoFar”和“totalTicks”值。 ProgressBar 控件使用此信息将图形栏从左向右推进以进行安装,从右向左推进以执行推进回滚操作。
此外,安装程序还会针对每个进度消息广播 TimeRemaining ControlEvent。 安装的剩余总时间是通过首先计算执行速度来确定的,执行速度是经过的总时钟周期数除以自安装开始以来的总时间。 剩余总时钟周期数除以执行速度,得出近似剩余时间。
当操作显示对话框收到 TimeRemaining ControlEvent 时,它会再次在 EventMapping 表中查找任何订阅的控件。 若要显示剩余时间,Text 控件必须使用在 Attributes 列中指定的 TimeRemaining 控件属性订阅 TimeRemaining ControlEvent。
订阅的 Text 控件在 UIText 表中查询名为“TimeRemaining”的参数化模板字符串。 此字符串有两个参数,[1] 表示分钟,[2] 表示秒。 Text 控件将每个值转换为分钟和秒,计算 TimeRemaining 模板字符串,并使用新信息更新文本控件。
如果 UI 显示级别设置为基本或更低级别,安装程序将显示一个默认对话框,其中包含进度栏和 TimeRemaining 文本字段。 有关详细信息,请参阅用户界面级别。