关于报告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 以使用从环境变量检索到的信息显示进度指示器。 若要传递当前百分比进度,请使用参数 uActionExecStepuActionExecMaxStep。 例如,如果在 中传递值 2,并在 中uActionExecStepuActionExecMaxStep传递值 10,则操作完成百分比为 20%。

另请参阅

IProgressUI::ShowActionProgressProgressUI