msiProvideComponentA 函数 (msi.h)
MsiProvideComponent 函数返回完整的组件路径,执行任何必要的安装。 如有必要,此函数会提示输入源,并递增该功能的使用情况计数。
语法
UINT MsiProvideComponentA(
[in] LPCSTR szProduct,
[in] LPCSTR szFeature,
[in] LPCSTR szComponent,
[in] DWORD dwInstallMode,
[out] LPSTR lpPathBuf,
[in, out] LPDWORD pcchPathBuf
);
参数
[in] szProduct
指定包含具有所需组件的功能的产品的产品代码。
[in] szFeature
指定具有必要组件的功能的特征 ID。
[in] szComponent
指定所需组件的组件代码。
[in] dwInstallMode
定义安装模式。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
提供组件并执行提供组件所需的任何安装。 如果缺少所请求功能中某个组件的关键文件或功能父级,请使用 MsiReinstallFeature 重新安装该功能,并设置以下标志位:REINSTALLMODE_FILEMISSING、REINSTALLMODE_FILEOLDERVERSION、REINSTALLMODE_FILEVERIFY、REINSTALLMODE_MACHINEDATA、REINSTALLMODE_USERDATA和REINSTALLMODE_SHORTCUT。 |
|
仅当功能存在时提供组件。 否则返回ERROR_FILE_NOT_FOUND。
此模式验证组件的密钥文件是否存在。 |
|
仅当功能存在时提供组件。 否则返回ERROR_FILE_NOT_FOUND。
此模式仅检查组件是否已注册,不验证组件的密钥文件是否存在。 |
|
调用 MsiReinstallFeature 以使用 dwReinstallMode 参数的此参数重新安装功能,然后提供 组件。 |
|
仅当功能的安装状态为INSTALLSTATE_LOCAL时,才提供组件。 如果功能的安装状态为INSTALLSTATE_SOURCE,则返回ERROR_INSTALL_SOURCE_ABSENT。 否则返回ERROR_FILE_NOT_FOUND。 此模式仅检查组件是否已注册,不验证密钥文件是否存在。 |
[out] lpPathBuf
指向接收组件路径的变量的指针。 此参数可以为 null。
[in, out] pcchPathBuf
指向变量的指针,该变量指定 lpPathBuf 参数指向的缓冲区的大小(以字符为单位)。 输入时,这是缓冲区的完整大小,包括终止 null 字符的空格。 如果传入的缓冲区太小,则返回的计数不包括终止 null 字符。
如果 lpPathBuf 为 null, 则 pcchBuf 可以为 null。
返回值
值 | 含义 |
---|---|
|
配置数据已损坏。 |
|
该功能不存在或损坏。 dwInstallMode = INSTALLMODE_EXISTING 返回此错误。 |
|
安装失败。 |
|
正在请求的组件在计算机上处于禁用状态。 |
|
向该函数传递了无效参数。 |
|
函数已成功完成。 |
|
功能 ID 不标识已知功能。 |
|
产品代码未标识已知产品。 |
|
无法识别的产品或功能名称已传递给函数。 |
|
返回缓冲区溢出。 |
|
无法检测源。 |
有关详细信息,请参阅 显示的错误消息。
注解
MsiProvideComponent 函数成功后,pcchPathBuf 参数包含 lpPathBuf 中字符串的长度。
MsiProvideComponent 函数结合了 MsiUseFeature、MsiConfigureFeature 和 MsiGetComponentPath 的功能。 可以使用 MsiProvideComponent 函数来简化调用顺序。 但是,由于此函数会递增使用情况计数,因此请谨慎使用它以防止不准确的使用情况计数。 MsiProvideComponent 函数提供的灵活性也低于单个调用系列。
如果应用程序正在从意外情况中恢复,则应用程序可能已调用 MsiUseFeature 并递增了使用计数。 在这种情况下,应用程序应调用 MsiConfigureFeature 而不是 MsiProvideComponent ,以避免计数再次递增。
INSTALLMODE_EXISTING 选项不能与 REINSTALLMODE 标志结合使用。
用户必须显式重新安装包含损坏的文件或错误版本的组件的功能,或者让应用程序调用 MsiReinstallFeature。
注意
msi.h 标头将 MsiProvideComponent 定义为别名,该别名根据 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 |