msiSetExternalUIRecord 函数 (msi.h)

MsiSetExternalUIRecord 函数启用外部用户界面 (UI) 处理程序。

语法

UINT MsiSetExternalUIRecord(
  [in]            INSTALLUI_HANDLER_RECORD  puiHandler,
  [in]            DWORD                     dwMessageFilter,
  [in]            LPVOID                    pvContext,
  [out, optional] PINSTALLUI_HANDLER_RECORD ppuiPrevHandler
);

参数

[in] puiHandler

指定符合 INSTALLUI_HANDLER_RECORD规范的 回调函数。

若要禁用当前的外部 UI 处理程序,请调用此参数设置为 NULL 值的函数。

[in] dwMessageFilter

指定要使用外部消息处理程序处理的消息。 如果外部处理程序返回非零结果,则不会将该消息发送到 UI,而是在启用日志记录时记录该消息。 有关详细信息,请参阅 MsiEnableLog

Value 含义
INSTALLLOGMODE_FILESINUSE
正在使用信息中的文件。

收到此消息后,应显示 FilesInUse 对话框

INSTALLLOGMODE_FATALEXIT
安装过早终止。
INSTALLLOGMODE_ERROR
记录错误消息。
INSTALLLOGMODE_WARNING
记录警告消息。
INSTALLLOGMODE_USER
记录用户请求。
INSTALLLOGMODE_INFO
未显示的状态消息将记录。
INSTALLLOGMODE_RESOLVESOURCE
请求确定有效的源位置。
INSTALLLOGMODE_RMFILESINUSE
正在使用信息中的文件。 收到此消息后,应显示 MsiRMFilesInUse 对话框
INSTALLLOGMODE_OUTOFDISKSPACE
磁盘空间不足。
INSTALLLOGMODE_ACTIONSTART
记录新的安装操作的开始。
INSTALLLOGMODE_ACTIONDATA
记录包含安装操作的数据记录。
INSTALLLOGMODE_COMMONDATA
记录用户界面初始化的参数。
INSTALLLOGMODE_PROGRESS
进度栏信息。

此消息包含到目前为止有关单位的信息和单位总数。 此消息仅发送到外部用户界面,并且未记录。 有关详细信息,请参阅 MsiProcessMessage

INSTALLLOGMODE_INITIALIZE
如果这不是安静安装,则会初始化 基本 UI

如果这是完整的 UI 安装,则尚未初始化 完整 UI

此消息仅发送到外部用户界面,并且未记录。

INSTALLLOGMODE_TERMINATE
如果使用完整 UI,则完整 UI 已结束。

如果这不是安静安装,则基本 UI 尚未结束。

此消息仅发送到外部用户界面,并且未记录。

INSTALLLOGMODE_SHOWDIALOG
在显示“完整 UI”对话框之前发送。

此消息仅发送到外部用户界面,并且未记录。

INSTALLLOGMODE_INSTALLSTART
产品安装开始。

该消息包含产品的 ProductName 和 ProductCode。

INSTALLLOGMODE_INSTALLEND
产品安装结束。

该消息包含产品的 ProductName、ProductCode 和返回值。

[in] pvContext

指向传递给回调函数的应用程序上下文的指针。

此参数可用于错误检查。

[out, optional] ppuiPrevHandler

返回指向以前设置的回调函数的指针,该函数符合 INSTALLUI_HANDLER_RECORD 规范;如果未设置任何回调,则返回 NULL

返回值

返回代码 说明
ERROR_SUCCESS
函数成功完成。
ERROR_CALL_NOT_IMPLEMENTED
此值指示尝试从自定义操作调用此函数。

无法从自定义操作调用此函数。

注解

无法从 自定义操作调用此函数。

通过调用 MsiSetExternalUIRecord 启用的外部 UI 处理程序接收 记录对象格式的消息。 通过调用 MsiSetExternalUI 启用的外部 UI 处理程序以字符串格式接收消息。 在 Windows Installer 内部 UI 之前,始终调用外部 UI。 在基于字符串的外部 UI 之前调用启用了基于记录的外部 UI。 如果基于记录的外部 UI 处理程序返回 0 (零) ,则会将消息发送到任何启用的基于字符串的外部 UI 处理程序。 如果外部 UI 处理程序返回非零值,则会取消内部 Windows Installer UI 处理程序,并将消息视为已处理。

此函数存储它已设置的外部用户界面。 若要将当前外部 UI 处理程序替换为以前的处理程序,请调用该函数,并将 INSTALLUI_HANDLER_RECORD 指定为 puiHandler 参数,将 0 (零) 指定为 dwMessageFilter 参数。

puiHandler 参数指向的外部用户界面处理程序无法完全控制外部用户界面,除非使用 dwUILevel 参数设置为INSTALLUILEVEL_NONE调用 MsiSetInternalUI。 如果未调用 MsiSetInternalUI ,则内部用户界面级别默认为INSTALLUILEVEL_BASIC。 因此,外部用户界面处理程序未处理的任何消息都由 Windows Installer 处理。 初始“准备安装”。 . 即使外部用户界面处理程序处理所有消息,对话框也会始终显示。 MsiSetExternalUI 只能从 引导 应用程序调用。 无法从自定义操作调用 MsiSetExternalUI

若要禁用此外部 UI 处理程序,请使用 puiHandler 参数的 NULL 值调用 MsiSetExternalUIRecord

Windows Installer 2.0 和 Windows Installer 3.0: 不支持。 MsiSetExternalUIRecord 函数从 Windows Installer 3.1 开始可用。

有关使用基于记录的外部处理程序的详细信息,请参阅 使用 MsiSetExternalUIRecord 监视安装

要求

   
最低受支持的客户端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 有关 Windows Installer 版本所需的最低 Windows Service Pack 的信息,请参阅 Windows Installer Run-Time要求。
目标平台 Windows
标头 msi.h
Library Msi.lib
DLL Msi.dll

另请参阅

接口和日志记录函数

Windows Installer 3.0 及更早版本中不支持