关于报告Configuration Manager自定义操作进度
自定义操作在 Configuration Manager 客户端上运行时,它可以报告用于显示进度指示器的进度信息。
使用 COM 自动化接口 IProgressUI::ShowActionProgress 向任务序列环境报告进度信息并显示进度指示器。
IProgressUI::ShowActionProgress
在 COM 类 ProgressUI 中实现,该类是 TSProgressUI.exe 中的进程外 COM 对象。
任务序列环境中的 ProgressUI
在任务序列运行之前, ProgressUI
将注册,然后在任务序列完成后,取消注册该任务序列。 在源操作系统中, ProgressUI
在登录的用户凭据下运行。 如果在任务序列运行时未登录任何用户,COM 对象的注册将失败。 在目标操作系统和 Windows PE 中, ProgressUI
在系统帐户下运行。
调用 IProgressUI::ShowActionProgress
在自定义操作中,必须执行以下操作才能报告自定义操作的进度并显示进度指示器。
注意
通常,如果操作需要超过一分钟才能运行,则应报告进度信息。
确定是否应显示进度指示器
使用以下逻辑,可以使用环境变量确定是否应显示进度指示器。
如果在 WindowsPE 中运行 ( _SMSTSInWinPE
== “true”) ,或
如果在安装后的完整操作系统中运行 (_SMSTSReturnToGINA
==“true”) ,或
如果任务序列是从媒体启动的, (_SMSTSLaunchMode
为“CD”、“DVD”或“USB”) ,或者
如果任务序列在独立模式下运行, (_SMSTSStandAloneMode
==“true”) ,或
如果显示进度 UI 标志 (_SMSTSShowProgressUI
== “true”) ,则应显示进度指示器;否则不应显示进度指示器。
创建 COM ProgressUI 对象
使用与任何 COM 对象相同的技术创建 ProgressUI
对象。 在 C++ 中,使用 CoCreateInstance
。 在 C# 中添加对 SMS TSE 进度 UI 的引用,并在源代码中创建 类的 ProgressUILib.ProgressUIClass
实例。
在 VBScript 中,使用 Microsoft.SMS 进行调用CreateObject
。TsProgressUI。
有关在 VBSript 和 C# 中创建 COM 对象的示例,请参阅如何在运行Configuration Manager任务序列中使用任务序列变量。
获取所需的环境变量
几个环境变量包含必须传递给 IProgressUI::ShowActionProgress
方法的信息。 例如,环境变量 中提供了 _SMSTSOrgName
参数所需的pszOrgName
组织名称。 有关详细信息,请参阅 IProgressUI::ShowActionProgress。 有关读取任务序列环境变量的信息,请参阅如何在正在运行Configuration Manager任务序列中使用任务序列变量。
调用 IProgressUI::ShowActionProgress
调用 IProgressUI::ShowActionProgress
以使用从环境变量检索到的信息显示进度指示器。 若要传递当前百分比进度,请使用参数 uActionExecStep
和 uActionExecMaxStep
。 例如,如果在 中传递值 2,并在 中uActionExecStep
uActionExecMaxStep
传递值 10,则操作完成百分比为 20%。