MsiJoinTransaction 函数 (msi.h)

MsiJoinTransaction 函数请求 Windows 安装程序使当前进程成为安装多包安装的事务的所有者。

Windows Installer 4.0 及更早版本不支持。 此函数从 Windows Installer 4.5 开始提供。

语法

UINT MsiJoinTransaction(
  [in]  MSIHANDLE hTransactionHandle,
  [in]  DWORD     dwTransactionAttributes,
  [out] HANDLE    *phChangeOfOwnerEvent
);

参数

[in] hTransactionHandle

事务 ID,用于标识事务,是 MsiBeginTransaction 函数返回的标识符。

[in] dwTransactionAttributes

多包安装的属性。

含义
0
当 0 或未设置任何值时,Windows Installer 会关闭上一次安装中的 UI。
MSITRANSACTION_CHAIN_EMBEDDEDUI
设置此属性以请求 Windows 安装程序在事务完成之前不关闭嵌入的 UI。
MSITRANSACTION_JOIN_EXISTING_EMBEDDEDUI
设置此属性以请求 Windows 安装程序从原始安装中传输嵌入的 UI。 如果原始安装没有嵌入的 UI,则设置此属性不执行任何操作。

[out] phChangeOfOwnerEvent

此参数返回事件句柄,当 MsiJoinTransaction 函数将事务的所有者更改为新所有者时设置该事件。 当前所有者可以使用它来确定事务的所有权何时发生了更改。 将事务保留为没有所有者将回滚该事务。

返回值

MsiJoinTransaction 函数可以返回以下值。

含义
ERROR_ACCESS_DENIED
拥有事务的用户和加入事务的用户不同。
ERROR_INVALID_PARAMETER
无效的参数将传递给 函数。
ERROR_INSTALL_ALREADY_RUNNING
在进行活动安装时,无法更改所有者。
ERROR_INVALID_HANDLE_STATE
提供的事务 ID 无效。

注解

由于事务一次只能由一个进程拥有,因此创作到 MsiEmbeddedChainer 表 的函数可以使用 MsiJoinTransaction 请求事务所有权,然后再使用 Windows 安装程序 API 配置或安装应用程序。 安装程序验证是否没有正在进行的安装。 安装程序验证请求所有权的进程和当前拥有事务的进程是否在同一进程树中共享父进程。 如果该函数成功,则调用 MsiJoinTransaction 的进程将成为事务的当前所有者。

MsiJoinTransaction 将新安装的内部 UI 设置为原始安装的 UI 级别。 新安装拥有事务后,可以调用 MsiSetInternalUI 来更改 UI 级别。 这使新安装能够在比原始安装更高的 UI 级别运行。

要求

要求
最低受支持的客户端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Vista、Windows XP、Windows Server 2003 和 Windows Server 2008 上的 Windows Installer 4.5。 若要了解 Windows Installer 版本所需的最低 Windows Service Pack,请参阅 Windows Installer 运行时要求。
目标平台 Windows
标头 msi.h
Library Msi.lib
DLL Msi.dll

另请参阅

多个包安装