msi.h) (MsiGetProductInfoA 函数
MsiGetProductInfo 函数返回已发布和已安装产品的产品信息。
语法
UINT MsiGetProductInfoA(
[in] LPCSTR szProduct,
[in] LPCSTR szAttribute,
[out] LPSTR lpValueBuf,
[in, out] LPDWORD pcchValueBuf
);
参数
[in] szProduct
指定产品的产品代码。
[in] szAttribute
指定要检索的属性。
必需属性保证可用,但其他属性仅在设置了该属性时才可用。 有关详细信息,请参阅 属性。 只能从已安装的应用程序检索以下列表中的属性。
属性 | 含义 |
---|---|
|
支持链接。 有关详细信息,请参阅 ARPHELPLINK 属性。 |
|
支持电话。 有关详细信息,请参阅 ARPHELPTELEPHONE 属性。 |
|
此产品最后一次接受服务的时间。 每次从产品应用或移除修补程序或使用 /v 命令行选项修复产品时,都会替换此属性的值。 如果产品未接受任何修复或修补,则此属性包含在此计算机上安装该产品的时间。 |
|
已安装的语言。 |
|
已安装的产品名称。 有关详细信息,请参阅 ProductName 属性。 |
|
安装位置。 有关详细信息,请参阅 ARPINSTALLLOCATION 属性。 |
|
安装源。 有关详细信息,请参阅 SourceDir 属性。 |
|
本地缓存包。 |
|
发行者。 有关详细信息,请参阅 Manufacturer 属性。 |
|
URL 信息。 有关详细信息,请参阅 ARPURLINFOABOUT 属性。 |
|
URL 更新信息。 有关详细信息,请参阅 ARPURLUPDATEINFO 属性。 |
|
派生自 ProductVersion 属性的次要产品版本。 |
|
派生自 ProductVersion 属性的主要产品版本。 |
|
产品版本。 有关详细信息,请参阅 ProductVersion 属性。 |
若要从已安装的应用程序检索产品 ID、注册所有者或注册公司,请将 szProperty 设置为以下文本字符串值之一。
值 | 说明 |
---|---|
ProductID | 产品的产品标识符。 有关详细信息,请参阅 ProductID 属性。 |
RegCompany | 注册以使用此产品的公司。 |
RegOwner | 注册以使用此产品的所有者。 |
若要检索产品的实例类型,请将 szProperty 设置为以下值。 此属性可用于已播发或已安装的产品。
值 | 说明 |
---|---|
InstanceType | 缺少值或值 0 (零) 表示产品安装正常。 值 1 (一) 指示使用多实例转换和 MSINEWINSTANCE 属性安装的产品。 适用于运行 Windows Server 2003 或具有 SP1 的 Windows XP 的安装程序。 有关详细信息,请参阅安装产品和修补程序的多个实例。 |
可以从播发或安装的应用程序检索以下列表中的播发属性。
属性 | 说明 |
---|---|
INSTALLPROPERTY_TRANSFORMS | 转换。 |
INSTALLPROPERTY_LANGUAGE | 产品语言。 |
INSTALLPROPERTY_PRODUCTNAME | 人类可读产品名称。 有关详细信息,请参阅 ProductName 属性。 |
INSTALLPROPERTY_ASSIGNMENTTYPE | 如果按用户播发或安装产品,则等于 0 (零) 。
如果为所有用户在每台计算机上播发或安装产品,则等于 1 (一个) 。 |
INSTALLPROPERTY_PACKAGECODE | 从中安装此产品的包的标识符。 有关详细信息,请参阅包代码。 |
INSTALLPROPERTY_VERSION | 派生自 ProductVersion 属性的产品版本。 |
INSTALLPROPERTY_PRODUCTICON | 包的主图标。 有关详细信息,请参阅 ARPPRODUCTICON 属性。 |
INSTALLPROPERTY_PACKAGENAME | 原始安装包的名称。 |
INSTALLPROPERTY_AUTHORIZED_LUA_APP | 值 1 (1) 表示可由非管理员使用 用户帐户控制 (UAC) 修补服务的产品。 缺失值或值 0 (零) 表示未启用最小特权修补。 在 Windows Installer 3.0 或更高版本中提供。 |
[out] lpValueBuf
指向接收属性值的缓冲区的指针。 此参数可以为 null。
[in, out] pcchValueBuf
指向变量的指针,该变量指定 lpValueBuf 参数指向的缓冲区的大小(以字符为单位)。 输入时,这是缓冲区的完整大小,包括终止 null 字符的空格。 如果传入的缓冲区太小,则返回的计数不包括终止 null 字符。
如果 lpValueBuf 为 null, 则 pcchValueBuf 可以为 null。 在这种情况下,函数会检查属性是否已正确注册到产品。
返回值
值 | 含义 |
---|---|
|
配置数据已损坏。 |
|
向该函数传递了无效参数。 |
|
缓冲区太小,无法保存请求的数据。 |
|
函数已成功完成。 |
|
产品未经批准或卸载。 |
|
无法识别 属性。
注意 如果正在查询的应用程序播发且未安装, MsiGetProductInfo 函数将返回ERROR_UNKNOWN_PROPERTY。
|
注解
当 MsiGetProductInfo 函数返回时,pcchValueBuf 参数包含存储在缓冲区中的字符串的长度。 返回的计数不包括终止 null 字符。 如果缓冲区不够大, MsiGetProductInfo 将返回ERROR_MORE_DATA并且 pcchValueBuf 包含字符串的大小(以字符为单位),而不计算 null 字符。
MsiGetProductInfo (INSTALLPROPERTY_LOCALPACKAGE) 不一定返回缓存包的路径。 缓存的包仅供内部使用。 应通过 MsiConfigureFeature、MsiConfigureProduct 或 MsiConfigureProductEx 函数调用维护模式安装。
如果尝试使用 MsiGetProductInfo 查询播发产品中仅适用于已安装产品的属性,则函数将返回ERROR_UNKNOWN_PROPERTY。 例如,如果应用程序已播发但未安装,则查询 INSTALLPROPERTY_INSTALLLOCATION 属性将返回错误ERROR_UNKNOWN_PROPERTY。
注意
msi.h 标头将 MsiGetProductInfo 定义为别名,该别名根据 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 Server 2003 或 Windows XP 上的 Windows Installer。 若要了解 Windows Installer 版本所需的最低 Windows Service Pack,请参阅 Windows Installer 运行时要求。 |
目标平台 | Windows |
标头 | msi.h |
Library | Msi.lib |
DLL | Msi.dll |