MsiGetProductInfoExA 函数 (msi.h)

MsiGetProductInfoEx 函数返回已播发和已安装产品的产品信息。 此函数可以检索信息

关于安装在当前用户以外的用户帐户下的产品实例。

调用进程必须具有与当前用户不同的用户的管理权限。 MsiGetProductInfoEx 函数无法查询在当前用户以外的用户帐户的按用户非托管上下文下播发的产品实例。

此函数是 MsiGetProductInfo 函数的扩展。

语法

UINT MsiGetProductInfoExA(
  [in]                LPCSTR            szProductCode,
  [in]                LPCSTR            szUserSid,
  [in]                MSIINSTALLCONTEXT dwContext,
  [in]                LPCSTR            szProperty,
  [out, optional]     LPSTR             szValue,
  [in, out, optional] LPDWORD           pcchValue
);

参数

[in] szProductCode

正在查询的产品实例的 ProductCode GUID。

[in] szUserSid

安全标识符 (要查询的产品实例所在的帐户的 SID) 。 NULL 指定当前用户 SID。

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

[in] dwContext

正在查询的产品实例的安装上下文。

名称 含义
MSIINSTALLCONTEXT_USERMANAGED
检索产品的每用户托管实例的 product 属性。
MSIINSTALLCONTEXT_USERUNMANAGED
检索产品的每用户非托管实例的 product 属性。
MSIINSTALLCONTEXT_MACHINE
检索产品的每台计算机实例的 product 属性。

[in] szProperty

正在查询的属性。

要检索的属性。 下表中的属性只能从已安装的应用程序检索。 保证所有必需的属性都可用,但仅当设置了属性时,其他属性才可用。 有关详细信息,请参阅
必需的属性属性

属性 含义
INSTALLPROPERTY_PRODUCTSTATE
对于播发,以字符串形式返回的产品的状态为“1”,对于已安装,则为“5”。
INSTALLPROPERTY_HELPLINK
支持链接。 有关详细信息,请参阅 ARPHELPLINK 属性。
INSTALLPROPERTY_HELPTELEPHONE
支持电话。 有关详细信息,请参阅 ARPHELPTELEPHONE 属性。
INSTALLPROPERTY_INSTALLDATE
此产品最后一次接受服务的时间。 每次从产品应用或移除修补程序或使用 /v 命令行选项修复产品时,都会替换此属性的值。 如果产品未接受任何修复或修补,则此属性包含在此计算机上安装该产品的时间。
INSTALLPROPERTY_INSTALLEDLANGUAGE
已安装的语言。

Windows Installer 4.5 及更早版本不支持。

INSTALLPROPERTY_INSTALLEDPRODUCTNAME
已安装的产品名称。 有关详细信息,请参阅 ProductName 属性。
INSTALLPROPERTY_INSTALLLOCATION
安装位置。 有关详细信息,请参阅 ARPINSTALLLOCATION 属性。
INSTALLPROPERTY_INSTALLSOURCE
安装源。 有关详细信息,请参阅 SourceDir 属性。
INSTALLPROPERTY_LOCALPACKAGE
本地缓存包。
INSTALLPROPERTY_PUBLISHER
发布服务器。 有关详细信息,请参阅 Manufacturer 属性。
INSTALLPROPERTY_URLINFOABOUT
URL 信息。 有关详细信息,请参阅 ARPURLINFOABOUT 属性。
INSTALLPROPERTY_URLUPDATEINFO
URL 更新信息。 有关详细信息,请参阅 ARPURLUPDATEINFO 属性。
INSTALLPROPERTY_VERSIONMINOR
派生自 ProductVersion 属性的次要产品版本。
INSTALLPROPERTY_VERSIONMAJOR
派生自 ProductVersion 属性的主产品版本。
INSTALLPROPERTY_VERSIONSTRING
产品版本。 有关详细信息,请参阅 ProductVersion 属性。
 

若要从已安装的应用程序检索产品 ID、注册所有者或注册公司,请将 szProperty 设置为以下文本字符串值之一。

说明
ProductID 产品标识符。 有关详细信息,请参阅 ProductID 属性。
RegCompany 已注册以使用该产品的公司。
RegOwner 注册使用产品的所有者。
 

若要检索产品的实例类型,请将 szProperty 设置为以下值。 此属性可用于已播发或已安装的产品。

说明
InstanceType 缺少值或值为 0 (零) 表示产品安装正常。 值 1 (1) 表示使用多实例转换和 MSINEWINSTANCE 属性安装的产品。 有关详细信息,请参阅安装产品和修补程序的多个实例
 

可以从播发或安装的应用程序检索下表中的属性。 对于在当前用户帐户以外的用户帐户的按用户非托管上下文中安装的产品实例,无法检索这些属性。

属性 说明
INSTALLPROPERTY_TRANSFORMS 转换。
INSTALLPROPERTY_LANGUAGE 产品语言。
INSTALLPROPERTY_PRODUCTNAME 人类可读的产品名称。 有关详细信息,请参阅 ProductName 属性。
INSTALLPROPERTY_ASSIGNMENTTYPE 如果按用户播发或安装产品,则等于 0 (零) 。

等于一 (1) 表示该产品已播发,或已为所有用户按计算机安装。

INSTALLPROPERTY_PACKAGECODE 从中安装产品的包的标识符。 有关详细信息,请参阅 Package Codes 属性。
INSTALLPROPERTY_VERSION 派生自 ProductVersion 属性的产品版本。
INSTALLPROPERTY_PRODUCTICON 包的主图标。 有关详细信息,请参阅 ARPPRODUCTICON 属性。
INSTALLPROPERTY_PACKAGENAME 原始安装包的名称。
INSTALLPROPERTY_AUTHORIZED_LUA_APP 值为 1 (1) 表示可由非管理员使用 用户帐户控制 (UAC) 修补服务的产品。 缺少值或值为 0 (零) 表示未启用最低特权修补。 在 Windows Installer 3.0 或更高版本中提供。

[out, optional] szValue

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

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

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

[in, out, optional] pcchValue

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

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

返回值

MsiGetProductInfoEx 函数返回以下值。

返回代码 说明
ERROR_ACCESS_DENIED
调用进程必须具有管理权限才能获取为当前用户以外的用户安装的产品的信息。
ERROR_BAD_CONFIGURATION
配置数据已损坏。
ERROR_INVALID_PARAMETER
将无效参数传递给函数。
ERROR_MORE_DATA
缓冲区太小,无法保存请求的数据。
ERROR_SUCCESS
函数已成功完成。
ERROR_UNKNOWN_PRODUCT
产品未经批准或卸载。
ERROR_UNKNOWN_PROPERTY
无法识别 属性。
注意 如果正在查询的应用程序播发且未安装, MsiGetProductInfo 函数将返回 ERROR_UNKNOWN_PROPERTY
 
ERROR_FUNCTION_FAILED
意外的内部故障。

注解

当 MsiGetProductInfoEx 函数返回时,pcchValue 参数包含存储在缓冲区中的字符串的长度。 返回的计数不包括终止 null 字符。 如果缓冲区不够大, MsiGetProductInfoEx 将返回 ERROR_MORE_DATA并且 pcchValue 参数包含字符串的大小(以 TCHAR 为单位),而不计算 null 字符。

msiGetProductInfoEx 函数 (INSTALLPROPERTY_LOCALPACKAGE) 返回缓存包的路径。 缓存的包仅供内部使用。 必须通过 MsiConfigureFeatureMsiConfigureProduct 或 MsiConfigureProductEx 函数调用维护模式安装。

如果正在查询的应用程序播发且未安装, MsiGetProductInfo 函数将返回 ERROR_UNKNOWN_PROPERTY 。 例如,如果应用程序已播发但未安装,则查询 INSTALLPROPERTY_INSTALLLOCATION 将返回 ERROR_UNKNOWN_PROPERTY错误。

注意

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

另请参阅

ARPHELPLINK

ARPHELPTELEPHONE

ARPINSTALLLOCATION

ARPPRODUCTICON

ARPURLINFOABOUT

ARPURLUPDATEINFO

Manufacturer

MsiConfigureFeature

MsiConfigureProduct

MsiConfigureProductEx

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

包代码

ProductCode

ProductID

ProductName

ProductVersion

属性

必需属性

SourceDir

系统状态函数