MsiGetPatchInfoExA 函数 (msi.h)

MsiGetPatchInfoEx 函数查询有关将修补程序应用到产品的指定实例的信息。

语法

UINT MsiGetPatchInfoExA(
  [in]            LPCSTR            szPatchCode,
  [in]            LPCSTR            szProductCode,
  [in]            LPCSTR            szUserSid,
  [in]            MSIINSTALLCONTEXT dwContext,
  [in]            LPCSTR            szProperty,
  [out, optional] LPSTR             lpValue,
  [in, out]       LPDWORD           pcchValue
);

parameters

[in] szPatchCode

一个以 null 结尾的字符串,其中包含修补程序的 GUID。 此参数不能为 NULL

[in] szProductCode

一个以 null 结尾的字符串,包含产品实例的 ProductCode GUID。 此参数不能为 NULL

[in] szUserSid

一个以 null 结尾的字符串,指定 SID (安全标识符) ,所查询的修补程序实例所在的位置。 使用 NULL 值指定当前用户。

SID 含义
NULL
指定登录的用户。
用户 SID
指定系统中特定用户 ID 的枚举。 以下示例标识可能的用户 SID:“S-1-3-64-2415071341-1358098788-3127455600-2561”。
 
注意 特殊 SID 字符串“S-1-5-18” (系统) 不能用于枚举按计算机安装的产品。 如果 dwContext为MSIINSTALLCONTEXT_MACHINE则 szUserSid 必须为 NULL
 

[in] dwContext

将枚举限制为每用户非托管、每用户托管或每计算机上下文。 此参数可以是以下任一值。

上下文 含义
MSIINSTALLCONTEXT_USERMANAGED
1
扩展至 szUserSid 指定用户的按用户托管安装的所有查询。
MSIINSTALLCONTEXT_USERUNMANAGED
2
扩展为 szUserSid 指定的用户的按用户非托管安装的所有查询。
MSIINSTALLCONTEXT_MACHINE
4
扩展到所有每台计算机安装的查询。

[in] szProperty

一个以 null 结尾的字符串,指定要检索的属性值。 szProperty 参数可以是下列参数之一:

名称 含义
INSTALLPROPERTY_LOCALPACKAGE
“LocalPackage”
获取产品使用的缓存修补程序文件。
INSTALLPROPERTY_TRANSFORMS
“转换”
获取上次修补程序安装应用到产品的修补程序转换集。 如果用户未登录,则此值可能不适用于每个用户的非托管应用程序。
INSTALLPROPERTY_INSTALLDATE
“InstallDate”
获取此产品上次收到服务的时间。 每次从产品应用或移除修补程序或使用 /v 命令行选项修复产品时,都会替换此属性的值。 如果产品未接受任何修复或修补,则此属性包含在此计算机上安装该产品的时间。
INSTALLPROPERTY_UNINSTALLABLE
“可卸载”
如果修补程序已标记为可从产品中卸载,则返回“1”。 在这种情况下,如果另一个无法卸载的修补程序需要此修补程序,则安装程序仍可能会阻止卸载。
INSTALLPROPERTY_PATCHSTATE
“State”
如果修补程序当前已应用于产品,则返回“1”。 如果此修补程序被另一个修补程序取代,则返回“2”。 如果此修补程序已过时,则返回“4”。 这些值对应于 MsiEnumPatchesExdwFilter 参数使用的常量。
INSTALLPROPERTY_DISPLAYNAME
“DisplayName”
获取修补程序的已注册显示名称。 对于在 MsiPatchMetadata 表中未包含 DisplayName 属性的修补程序,返回的显示名称是空字符串 ("")。
INSTALLPROPERTY_MOREINFOURL
“MoreInfoURL”
获取修补程序的已注册支持信息 URL。 对于在 MsiPatchMetadata 表中未包含 MoreInfoURL 属性的修补程序,返回的支持信息 URL 是空字符串 ("")。

[out, optional] lpValue

此参数是指向接收属性值的缓冲区的指针。 此缓冲区应足够大,以包含信息。 如果缓冲区太小,函数将返回 ERROR_MORE_DATA 并将 *pcchValue 设置为属性值中的 TCHAR 数,不包括终止 NULL 字符。

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

如果 lpValuepcchValue 都设置为 NULL,则如果值存在,则函数将返回 ERROR_SUCCESS ,而不检索值。

[in, out] pcchValue

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

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

返回值

MsiGetPatchInfoEx 函数返回以下值。

返回代码 说明
ERROR_ACCESS_DENIED
函数无法尝试访问权限不足的资源。
ERROR_BAD_CONFIGURATION
配置数据已损坏。
ERROR_FUNCTION_FAILED
函数失败,其他错误代码中未识别该错误。
ERROR_INVALID_PARAMETER
将无效参数传递给函数。
ERROR_MORE_DATA
该值不适合在提供的缓冲区中。
ERROR_SUCCESS
已成功枚举修补程序。
ERROR_UNKNOWN_PRODUCT
计算机上未安装 szProduct 指定的产品。
ERROR_UNKNOWN_PROPERTY
无法识别 属性。
ERROR_UNKNOWN_PATCH
无法识别修补程序。

注解

Windows Installer 2.0: 不支持。 此函数从 Windows Installer 版本 3.0 开始提供。

用户可以查询任何可见产品实例的修补程序数据。 管理员组可以查询计算机上的任何产品实例和任何用户的修补程序数据。 如果用户未登录,则并非所有值都可用于每个用户的非托管应用程序。

注意

msi.h 标头将 MsiGetPatchInfoEx 定义为别名,该别名根据 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

另请参阅

ProductCode

移除修补程序