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 | 意义 |
---|---|
|
当前已登录的用户。 |
|
系统中特定用户的枚举。 用户 SID 的示例为“S-1-3-64-2415071341-1358098788-3127455600-2561”。 |
[in] dwContext
正在查询的产品实例的安装上下文。
名字 | 意义 |
---|---|
|
检索产品的每个用户托管实例的产品属性。 |
|
检索产品的每个用户非托管实例的产品属性。 |
|
检索产品的每台计算机实例的产品属性。 |
[in] szProperty
正在查询的属性。
要检索的属性。 下表中的属性只能从已安装的应用程序中检索。 所有必需的属性都保证可用,但仅当设置属性时,其他属性才可用。 有关详细信息,请参阅
必需属性 和 属性。
财产 | 意义 |
---|---|
|
以字符串形式返回的产品的状态为“1”(已播发),安装为“5”。 |
|
支持链接。 有关详细信息,请参阅 ARPHELPLINK 属性。 |
|
支持电话。 有关详细信息,请参阅 ARPHELPTELEPHONE 属性。 |
|
此产品上次收到服务的时间。 每次从产品应用或删除修补程序或 /v Command-Line 选项 用于修复产品时,都会替换此属性的值。 如果产品未收到任何修复或修补程序,则此属性包含此产品在此计算机上安装的时间。 |
|
已安装的语言。 |
|
已安装的产品名称。 有关详细信息,请参阅 ProductName 属性。 |
|
安装位置。 有关详细信息,请参阅 ARPINSTALLLOCATION 属性。 |
|
安装源。 有关详细信息,请参阅 SourceDir 属性。 |
|
本地缓存包。 |
|
发布者。 有关详细信息,请参阅 制造商 属性。 |
|
URL 信息。 有关详细信息,请参阅 ARPURLINFOABOUT 属性。 |
|
URL 更新信息。 有关详细信息,请参阅 ARPURLUPDATEINFO 属性。 |
|
派生自 ProductVersion 属性的次要产品版本。 |
|
派生自 ProductVersion 属性的主要产品版本。 |
|
产品版本。 有关详细信息,请参阅 ProductVersion 属性。 |
若要从已安装的应用程序检索产品 ID、已注册所有者或已注册的公司,请将 szProperty 设置为以下文本字符串值之一。
价值 | 描述 |
---|---|
ProductID | 产品标识符。 有关详细信息,请参阅 ProductID 属性。 |
RegCompany | 注册使用该产品的公司。 |
RegOwner | 注册使用该产品的所有者。 |
若要检索产品的实例类型,请将 szProperty 设置为以下值。 此属性可用于播发或已安装的产品。
价值 | 描述 |
---|---|
InstanceType | 缺失值或值为 0(零)表示正常的产品安装。 值 1(1)表示使用多个实例转换和 MSINEWINSTANCE 属性安装的产品。 有关详细信息,请参阅 安装多个产品和修补程序实例。 |
可以从播发或安装的应用程序中检索下表中的属性。 对于在除当前用户帐户以外的用户帐户的按用户非托管上下文下安装的产品实例,无法检索这些属性。
财产 | 描述 |
---|---|
INSTALLPROPERTY_TRANSFORMS | 变换。 |
INSTALLPROPERTY_LANGUAGE | 产品语言。 |
INSTALLPROPERTY_PRODUCTNAME | 人工可读产品名称。 有关详细信息,请参阅 ProductName 属性。 |
INSTALLPROPERTY_ASSIGNMENTTYPE | 如果产品是按用户播发或安装的,则等于 0(零)。
如果产品是针对所有用户播发或安装的,则等于 1 (1)。 |
INSTALLPROPERTY_PACKAGECODE | 从中安装产品的包的标识符。 有关详细信息,请参阅 包代码 属性。 |
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 设置为 NULL,并且 pcchValue 设置为有效指针,则该函数将返回 ERROR_SUCCESS 并将 *pcchValue 设置为值中 TCHAR 的数量,不包括终止 NULL 字符。 然后,可以再次调用该函数以检索值,lpValue 缓冲区足够大,足以包含 *pcchValue + 1 个字符。
如果 lpValue 和 pcchValue 都设置为 NULL,则函数将返回 ERROR_SUCCESS 值(而不检索该值)。
[in, out, optional] pcchValue
指向一个变量的指针,该变量指定 lpValue 缓冲区中 TCHAR 的数目。 当函数返回时,无论函数是否将值复制到指定的缓冲区,此参数都设置为所请求值的大小。 大小返回为请求值中 TCHAR 的数量,不包括终止 null 字符。
仅当 lpValue 也 NULL时,才能将此参数设置为 NULL。 否则,该函数将返回 ERROR_INVALID_PARAMETER。
返回值
MsiGetProductInfoEx 函数返回以下值。
返回代码 | 描述 |
---|---|
|
调用过程必须具有管理权限才能获取为当前用户以外的用户安装的产品的信息。 |
|
配置数据已损坏。 |
|
将无效参数传递给函数。 |
|
缓冲区太小,无法保存请求的数据。 |
|
函数成功完成。 |
|
产品未经过修改或卸载。 |
|
无法识别该属性。
注释 如果播发且未安装应用程序,MsiGetProductInfo 函数将返回 ERROR_UNKNOWN_PROPERTY。
|
|
意外的内部故障。 |
言论
MsiGetProductInfoEx 函数返回时,pcchValue 参数包含存储在缓冲区中的字符串的长度。 返回的计数不包括终止 null 字符。 如果缓冲区不够大,MsiGetProductInfoEx 返回 ERROR_MORE_DATA,pcchValue 参数包含字符串的大小(TCHAR),而不计算 null 字符。
MsiGetProductInfoEx 函数 (INSTALLPROPERTY_LOCALPACKAGE) 返回缓存包的路径。 缓存包仅供内部使用。 必须通过 MsiConfigureFeature、MsiConfigureProduct或 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 Run-Time 要求。 |
目标平台 | 窗户 |
标头 | msi.h |
库 | Msi.lib |
DLL | Msi.dll |