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
正在查询的产品实例的安装上下文。
名称 | 含义 |
---|---|
|
检索产品的每用户托管实例的 product 属性。 |
|
检索产品的每用户非托管实例的 product 属性。 |
|
检索产品的每台计算机实例的 product 属性。 |
[in] szProperty
正在查询的属性。
要检索的属性。 下表中的属性只能从已安装的应用程序检索。 保证所有必需的属性都可用,但仅当设置了属性时,其他属性才可用。 有关详细信息,请参阅
必需的属性 和 属性。
属性 | 含义 |
---|---|
|
对于播发,以字符串形式返回的产品的状态为“1”,对于已安装,则为“5”。 |
|
支持链接。 有关详细信息,请参阅 ARPHELPLINK 属性。 |
|
支持电话。 有关详细信息,请参阅 ARPHELPTELEPHONE 属性。 |
|
此产品最后一次接受服务的时间。 每次从产品应用或移除修补程序或使用 /v 命令行选项修复产品时,都会替换此属性的值。 如果产品未接受任何修复或修补,则此属性包含在此计算机上安装该产品的时间。 |
|
已安装的语言。 |
|
已安装的产品名称。 有关详细信息,请参阅 ProductName 属性。 |
|
安装位置。 有关详细信息,请参阅 ARPINSTALLLOCATION 属性。 |
|
安装源。 有关详细信息,请参阅 SourceDir 属性。 |
|
本地缓存包。 |
|
发布服务器。 有关详细信息,请参阅 Manufacturer 属性。 |
|
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) 表示该产品已播发,或已为所有用户按计算机安装。 |
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 设置为 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 运行时要求。 |
目标平台 | Windows |
标头 | msi.h |
Library | Msi.lib |
DLL | Msi.dll |
另请参阅
在 Windows Installer 2.0 及更低版本中不受支持
ProductName