分析 Windows Installer 消息

外部 UI 处理程序可以处理由 MsiSetExternalUI 函数的 dwMessagedFilter 参数指定的安装程序消息列表。 其中一些消息包含可直接使用的字符串,而其他消息可能需要通过外部 UI 处理程序进行分析和处理才能发挥作用。 外部 UI 处理程序可能只需要监视 Windows Installer 消息,而无需执行影响安装的任何操作。

以下 Windows Installer 消息包含的字符串可由对话框显示,无需进行其他处理。 这些消息包含要由对话框显示的按钮和图标的列表。 可以使用 MB_ICONMASK、MB_DEFMASK和 MB_TYPEMASK 值来指定图标和按钮。

INSTALLMESSAGE_FATALEXIT

过早终止安装。

INSTALLMESSAGE_ERROR

格式化错误消息。

INSTALLMESSAGE_WARNING

格式化警告消息。

INSTALLMESSAGE_INFO

格式化日志消息。

INSTALLMESSAGE_USER

格式化用户消息。

INSTALLMESSAGE_OUTOFDISKSPACE

指示磁盘空间不足的格式化消息

外部用户处理程序可以使用以下 Windows Installer 消息来监视 Windows Installer UI 的序列。 显示每个对话框时,安装程序在 Windows Installer UI 序列的开头和末尾发送这些消息。 使用这些消息不需要任何处理。

INSTALLMESSAGE_TERMINATE

此消息指示 UI 序列的末尾。 字符串为 null 字符串。

INSTALLMESSAGE_INITIALIZE

此消息指示 UI 序列已启动。 字符串为 null 字符串。

INSTALLMESSAGE_SHOWDIALOG

字符串包含当前对话框的名称。

以下 Windows Installer 消息需要外部 UI 处理程序进行其他处理。

INSTALLMESSAGE_RESOLVESOURCE

外部用户界面处理程序必须返回 0 并允许 Windows Installer 处理消息。 外部用户界面处理程序可以监视此消息,但它不应执行任何影响安装的操作。

INSTALLMESSAGE_FILESINUSE

外部 UI 应显示 FilesInUse 对话框以响应此消息。

INSTALLMESSAGE_RMFILESINUSE

外部 UI 应显示 MsiRMFilesInUse 对话框以响应此消息。 从 Windows Installer 版本 4.0 开始提供。 有关此消息的详细信息,请参阅将重新启动管理器与外部 UI 配合使用

INSTALLMESSAGE_ACTIONSTART

此消息提供有关当前操作的信息。 格式为 Action [1]: [2]。 [3],其中冒号用于分隔字段 1 和字段 2,句点用于分隔字段 2 和字段 3。 字段 [1] 包含使用 Time 属性格式启动操作的时间。 字段 [2] 包含序列表中的操作名称。 字段 [3] 提供 ActionText 表MsiProcessMessage 函数中的操作说明。

INSTALLMESSAGE_ACTIONDATA

此字符串的格式由 ActionText 表中提供的 Template 值或 MsiProcessMessage 函数指定。 INSTALLMESSAGE_ACTIONSTART 消息之后的 INSTALLMESSAGE_ACTIONDATA 不受数量限制。

INSTALLMESSAGE_COMMONDATA

此消息具有三个子类型:Language、Caption 和 CancelShow。 字符串可以有三个字段,由数字分隔,后跟冒号。 并非所有字段均为必需字段。 消息可以是 NULL 或空 (“”) 字符串。

Language

字段 1 包含值 0,指示此字符串包含语言信息。 字段 2 包含一个语言值,该值是一个语言标识符 (LANGID) 数字。字段 3 是表示 ANSI 代码页的值。

Caption

字段 1 包含值 1,指示此字符串包含描述文字或标题的文本。 字段 2 包含外部 UI 处理程序可以用作对话框标题的描述文字的文本。 字段 3 为 NULL 或空 ("") 字符串。 Caption 消息中可以缺少字段 3。

CancelShow

字段 1 包含值 2,指示此字符串包含有关是否显示取消按钮的信息。 如果取消按钮应隐藏,则字段 2 包含值 0。 如果取消按钮应可见,则字段 2 包含值 1。

INSTALLMESSAGE_PROGRESS

此消息具有四个子类型:Reset、ActionInfo、ProgressReport 和 ProgressAddition。 在收到第一条重置进度消息之前,外部处理程序不应对上述任何消息执行操作。 这提供了进度栏的刻度总数的估计值。

重置

字段 1 包含值 0,指示进度栏的重置。 字段 2 包含进度栏中的刻度总数。 字段 3 包含向前进度栏运动的值 0。 字段 3 包含向后进度栏运动的值 1。 字段 4 中的值 0 表示安装正在进行,可以计算剩余时间。 字段 4 中的值 1 表示脚本正在运行,并且可以显示“请稍候...”消息。 刻度总数的估计值是近似值,可能不准确。

ActionInfo

字段 1 包含值 1,指示此字符串包含操作信息。 字段 2 包含当前操作发送的每个 ActionData 消息的进度栏移动的刻度数。 如果字段 3 包含值 0,则忽略字段 2。 如果字段 3 包含值 1,则按当前操作发送的每个 ActionData 消息的字段 2 中的刻度数递增进度栏。 字段 4 未使用。

ProgressReport

字段 1 包含值 2,指示此字符串包含进度信息。 字段 2 包含进度栏已移动的刻度数。 字段 3 未使用。 字段 4 未使用。

ProgressAddition

字段 1 包含值 3,指示某个操作可以增加进度栏的刻度。 字段 2 包含预期进度栏刻度总数会增加的刻度数。 字段 3 未使用。 字段 4 未使用。