MsiEnumPatchesExW 函数 (msi.h)

MsiEnumPatchesEx 函数枚举特定上下文或跨所有上下文的所有修补程序。 枚举已应用于产品的修补程序。 还会枚举已注册但尚未应用于产品的修补程序。

语法

UINT MsiEnumPatchesExW(
  [in, optional]      LPCWSTR           szProductCode,
  [in, optional]      LPCWSTR           szUserSid,
  [in]                DWORD             dwContext,
  [in]                DWORD             dwFilter,
  [in]                DWORD             dwIndex,
  [out, optional]     WCHAR [39]        szPatchCode,
  [out, optional]     WCHAR [39]        szTargetProductCode,
  [out, optional]     MSIINSTALLCONTEXT *pdwTargetProductContext,
  [out, optional]     LPWSTR            szTargetUserSid,
  [in, out, optional] LPDWORD           pcchTargetUserSid
);

parameters

[in, optional] szProductCode

一个以 null 结尾的字符串,指定枚举其修补程序的产品的 ProductCode GUID。 如果不是 NULL,则修补程序枚举仅限于 szUserSiddwContext 指定的用户和上下文下的此产品的实例。 如果 为 NULL,则枚举指定上下文下所有产品的修补程序。

[in, optional] szUserSid

一个以 null 结尾的字符串,指定限制枚举上下文的 SID) (安全标识符。 特殊 SID 字符串“S-1-1-0” (Everyone) 指定系统中所有用户的枚举。 “S-1-1-0”以外的 SID 值被视为用户 SID,并将枚举限制为该用户。 枚举当前用户以外的用户时,不会枚举使用低于 Windows Installer 版本 3.0 的版本在每用户非托管上下文中应用的任何修补程序。 此参数可以设置为 NULL 以指定当前用户。

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

将枚举限制为一个或多个上下文。 此参数可以是以下值的任意一个或组合。

上下文 含义
MSIINSTALLCONTEXT_USERMANAGED
扩展为 szUserSid 指定的用户的按用户托管安装的所有枚举。 无效的 SID 不返回任何项。
MSIINSTALLCONTEXT_USERUNMANAGED
在此上下文中,仅为非当前用户的用户枚举随 Windows Installer 版本 3.0 安装的修补程序。 对于当前用户,函数枚举所有已安装和新修补程序。 szUserSid 的 SID 无效不返回任何项。
MSIINSTALLCONTEXT_MACHINE
扩展到所有每台计算机安装的枚举。 如果 dwContext 设置为仅 MSIINSTALLCONTEXT_MACHINE则 szUserSid 参数必须为 NULL

[in] dwFilter

枚举的筛选器。 此参数可以是下列参数的一个或组合。

筛选器 含义
MSIPATCHSTATE_APPLIED
1
枚举包括已应用的修补程序。 枚举不包括被取代或过时的修补程序。
MSIPATCHSTATE_SUPERSEDED
2
枚举包括标记为被取代的修补程序。
MSIPATCHSTATE_OBSOLETED
4
枚举包括标记为已过时的修补程序。
MSIPATCHSTATE_REGISTERED
8
枚举包括已注册但尚未应用的修补程序。 MsiSourceListAddSourceEx 函数可以注册新修补程序。
注意 不会枚举为当前用户以外的用户注册并在每用户非托管上下文中应用的修补程序。
 
MSIPATCHSTATE_ALL
15
枚举包括所有已应用、已过时、被取代和已注册的修补程序。

[in] dwIndex

要检索的修补程序的索引。 首次调用 MsiEnumPatchesEx 函数时,此参数必须为零,然后为后续调用递增。 仅当上一次调用返回ERROR_SUCCESS时,才应递增 dwIndex 参数。

[out, optional] szPatchCode

一个输出缓冲区,用于包含要枚举的修补程序的 GUID。 缓冲区应足够大,以容纳 GUID。 此参数可以为 NULL。

[out, optional] szTargetProductCode

一个输出缓冲区,用于包含接收此修补程序的产品的 ProductCode GUID。 缓冲区应足够大,以容纳 GUID。 此参数可以为 NULL。

[out, optional] pdwTargetProductContext

返回要枚举的修补程序的上下文。 输出值可以是 MSIINSTALLCONTEXT_USERMANAGEDMSIINSTALLCONTEXT_USERUNMANAGEDMSIINSTALLCONTEXT_MACHINE。 此参数可以为 NULL。

[out, optional] szTargetUserSid

接收此修补程序实例所在的帐户的字符串 SID 的输出缓冲区。 此缓冲区返回每台计算机上下文的空字符串。

此缓冲区应足够大,以包含 SID。 如果缓冲区太小,函数将返回 ERROR_MORE_DATA 并将 *pcchTargetUserSid 设置为值中的 TCHAR 数,不包括终止 NULL 字符。

如果 szTargetUserSid 设置为 NULL而 pcchTargetUserSid 设置为有效指针,则该函数将返回 ERROR_SUCCESS 并将 *pcchTargetUserSid 设置为值中的 TCHAR 数,不包括终止 NULL 字符。 然后,可以再次调用 该函数来检索值, 其中 szTargetUserSid 缓冲区足够大,足以包含 *pcchTargetUserSid + 1 个字符。

如果 szTargetUserSidpcchTargetUserSid 都设置为 NULL,则该函数返回 ERROR_SUCCESS (如果该值存在),而不检索值。

[in, out, optional] pcchTargetUserSid

指向变量的指针,该变量指定 szTargetUserSid 缓冲区中的 TCHAR 数。 当函数返回时,无论函数是否将值复制到指定的缓冲区中,此参数都设置为所请求值的大小。 大小作为请求值中的 TCHAR 数返回,不包括终止 null 字符。

仅当 szTargetUserSid 也为 NULL 时,此参数才能设置为 NULL,否则函数将返回ERROR_INVALID_PARAMETER。

返回值

MsiEnumPatchesEx 函数返回以下值之一。

返回代码 说明
ERROR_ACCESS_DENIED
函数无法尝试访问权限不足的资源。
ERROR_BAD_CONFIGURATION
配置数据已损坏。
ERROR_INVALID_PARAMETER
将无效参数传递给函数。
ERROR_NO_MORE_ITEMS
没有更多要枚举的修补程序。
ERROR_SUCCESS
已成功枚举修补程序。
ERROR_UNKNOWN_PRODUCT
szProduct 指定的产品未安装在指定上下文中的计算机上。
ERROR_MORE_DATA
pcchTargetUserSid 指向的缓冲区大小小于复制 SID 所需的大小时,将返回此值。 在这种情况下,用户可以修复缓冲区,并再次调用 MsiEnumPatchesEx 以获取相同的索引值。

注解

非管理员只能在其可见性范围内枚举修补程序。 管理员可以枚举其他用户上下文的修补程序。

注意

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

要求

   
最低受支持的客户端 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 运行时要求。
目标平台 Windows
标头 msi.h
Library Msi.lib
DLL Msi.dll

另请参阅

安装上下文

MsiSourceListAddSourceEx

在 Windows Installer 2.0 及更低版本中不受支持

ProductCode