MsiEnumClientsExA 函数 (msi.h)

MsiEnumClientsEx 函数枚举使用指定组件安装的应用程序。 每次调用应用程序时,该函数都会检索应用程序的 代码示例

Windows Installer 4.5 或更高版本:不支持 。 从 Windows Installer 5.0 开始,此函数可用。

语法

UINT MsiEnumClientsExA(
  [in]                LPCSTR            szComponent,
  [in, optional]      LPCSTR            szUserSid,
  [in]                DWORD             dwContext,
  [in]                DWORD             dwProductIndex,
  [out, optional]     CHAR [39]         szProductBuf,
  [out, optional]     MSIINSTALLCONTEXT *pdwInstalledContext,
  [out, optional]     LPSTR             szSid,
  [in, out, optional] LPDWORD           pcchSid
);

参数

[in] szComponent

标识组件的组件代码 GUID。 该函数枚举使用此组件的应用程序。

[in, optional] szUserSid

包含安全标识符(SID)的以 null 结尾的字符串值。应用程序的枚举扩展到此 SID 标识的用户。 特殊的 SID 字符串 s-1-1-0 (每个人)枚举系统中所有用户的所有应用程序。 s-1-1-0 以外的 SID 值为特定用户指定用户 SID,并枚举指定用户安装的应用程序实例。

SID 类型 意义
NULL
指定当前已登录的用户。
用户 SID
指定特定用户的枚举。 用户 SID 的示例是“S-1-3-64-2415071341-1358098788-3127455600-2561”。
s-1-1-0
指定系统中所有用户的枚举。
 
注释 特殊 SID 字符串 s-1-5-18 (系统)不能用于枚举每台计算机安装上下文中存在的应用程序。 将 SID 值设置为 s-1-5-18 将返回 ERROR_INVALID_PARAMETER。 仅当 dwContext 设置为 MSIINSTALLCONTEXT_MACHINE 时,szUserSid 的值必须 NULL
 

[in] dwContext

将枚举扩展到指定安装上下文中安装的应用程序实例的标志。 该枚举仅包括由 szUserSid标识的用户安装的应用程序实例。

这可以是以下值的组合。

上下文 意义
MSIINSTALLCONTEXT_USERMANAGED
1
在每用户托管安装上下文中包括安装的应用程序。
MSIINSTALLCONTEXT_USERUNMANAGED
2
在每用户非托管安装上下文中包括安装的应用程序。
MSIINSTALLCONTEXT_MACHINE
4
在每台计算机安装上下文中包括安装的应用程序。 仅当 dwInstallContext 设置为 MSIINSTALLCONTEXT_MACHINE 时,szUserSID 参数的值必须 NULL

[in] dwProductIndex

指定要检索的应用程序的索引。 在对函数的第一次调用中,此参数的值必须为零(0)。 对于每个后续调用,索引必须递增 1。 仅当对函数的上一次调用返回 ERROR_SUCCESS时,索引才应递增。

[out, optional] szProductBuf

接收应用程序的代码示例的字符串值。 此位置的缓冲区长度应足够大,可以保存包含产品名称的以 null 结尾的字符串值。 前 38 TCHAR 字符接收组件的 GUID,第 39 个字符接收终止 NULL 字符。

[out, optional] pdwInstalledContext

提供应用程序的安装上下文的标志。

这可以是以下值的组合。

上下文 意义
MSIINSTALLCONTEXT_USERMANAGED
1
该应用程序安装在每用户管理的安装上下文中。
MSIINSTALLCONTEXT_USERUNMANAGED
2
应用程序安装在每用户非托管安装上下文中。
MSIINSTALLCONTEXT_MACHINE
4
该应用程序位于每台计算机安装安装上下文中。

[out, optional] szSid

接收用于标识安装应用程序的用户的安全标识符(SID)。 如果应用程序实例存在于每台计算机安装上下文中,该位置将接收空字符串值。

缓冲区的长度应足够大,可以容纳包含 SID 的以 null 结尾的字符串值。 如果缓冲区太小,则该函数将返回 ERROR_MORE_DATApcchSid 指向的位置 接收 SID 中 TCHAR 的数量,不包括终止 NULL 字符。

如果 szSid 设置为 NULLpcchSid 是指向内存中某个位置的有效指针,则该函数将返回 ERROR_SUCCESS,并且该位置在 SID 中接收 TCHAR 数,不包括终止 null 字符。 然后,可以再次调用该函数以检索值,szSid 缓冲区的大小足以包含 *pcchSid + 1 个字符。

SID 类型 意义
空字符串
该应用程序安装在每台计算机安装上下文中。
用户 SID
安装产品的用户的 SID。

[in, out, optional] pcchSid

指向内存中某个位置的指针,该位置包含一个变量,该变量指定 SID 中 TCHAR 的数目,不包括终止 null 字符。 当函数返回时,此变量设置为所请求的 SID 的大小,无论该函数是否可以成功将 SID 和终止 null 字符复制到 szSid指向的缓冲区位置。 大小作为请求值中的 TCHAR 数返回,不包括终止 null 字符。

仅当 szSidNULL时,此参数才能设置为 NULL,否则该函数将返回 ERROR_INVALID_PARAMETER。 如果 szSidpcchSid 都设置为 NULL,则函数将返回 ERROR_SUCCESS(如果存在 SID)而不检索 SID 值。

返回值

MsiEnumClientsEx 函数返回以下值之一。

返回代码 描述
ERROR_ACCESS_DENIED
管理员权限是枚举当前用户以外的用户安装的应用程序组件所必需的。
ERROR_BAD_CONFIGURATION
配置数据已损坏。
ERROR_INVALID_PARAMETER
将无效参数传递给函数。
ERROR_NO_MORE_ITEMS
没有更多要枚举的应用程序。
ERROR_SUCCESS
函数成功。
ERROR_MORE_DATA
提供的缓冲区太小,无法容纳整个值。
ERROR_FUNCTION_FAILED
函数失败。

言论

注意

msi.h 标头将 MsiEnumClientsEx 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

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