MsiGetPatchInfoExW 函数 (msi.h)

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

语法

UINT MsiGetPatchInfoExW(
  [in]            LPCWSTR           szPatchCode,
  [in]            LPCWSTR           szProductCode,
  [in]            LPCWSTR           szUserSid,
  [in]            MSIINSTALLCONTEXT dwContext,
  [in]            LPCWSTR           szProperty,
  [out, optional] LPWSTR            lpValue,
  [in, out]       LPDWORD           pcchValue
);

参数

[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”(系统)不能用于按计算机枚举安装的产品。 如果 MSIINSTALLCONTEXT_MACHINEdwContextszUserSid 必须 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 Command-Line 选项 用于修复产品时,都会替换此属性的值。 如果产品未收到任何修复或修补程序,则此属性包含此产品在此计算机上安装的时间。
INSTALLPROPERTY_UNINSTALLABLE
“Uninstallable”
如果修补程序标记为可能从产品中卸载,则返回“1”。 在这种情况下,如果无法卸载的另一个修补程序需要此修补程序,安装程序仍可以阻止卸载。
INSTALLPROPERTY_PATCHSTATE
“State”
如果此修补程序当前应用于产品,则返回“1”。 如果此修补程序被另一个修补程序取代,则返回“2”。 如果此修补程序已过时,则返回“4”。 这些值对应于 MsiEnumPatchesEx 使用的 dwFilter 参数的常量。
INSTALLPROPERTY_DISPLAYNAME
“DisplayName”
获取修补程序的已注册显示名称。 对于在 MsiPatchMetadata 表中不包含 DisplayName 属性的修补程序,返回的显示名称为空字符串(“)。
INSTALLPROPERTY_MOREINFOURL
“MoreInfoURL”
获取修补程序的已注册支持信息 URL。 对于在 MsiPatchMetadata 表中不包含 MoreInfoURL 属性的修补程序,返回的支持信息 URL 是空字符串(“)。

[out, optional] lpValue

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

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

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

[in, out] pcchValue

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

仅当 lpValueNULL时,才能将此参数设置为 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 Run-Time 要求。
目标平台 窗户
标头 msi.h
Msi.lib
DLL Msi.dll

另请参阅

ProductCode

删除修补程序