msiProvideAssemblyW 函数 (msi.h)

MsiProvideAssembly 函数返回包含程序集的 Windows Installer 组件的完整路径。 函数提示输入源并执行任何必要的安装。 MsiProvideAssembly 递增功能的使用计数。

语法

UINT MsiProvideAssemblyW(
  [in]      LPCWSTR szAssemblyName,
  [in]      LPCWSTR szAppContext,
  [in]      DWORD   dwInstallMode,
  [in]      DWORD   dwAssemblyInfo,
  [out]     LPWSTR  lpPathBuf,
  [in, out] LPDWORD pcchPathBuf
);

参数

[in] szAssemblyName

字符串格式的程序集名称。

[in] szAppContext

对于全局程序集,设置为 Null。 对于专用程序集,请将 szAppContext 设置为应用程序配置文件的完整路径或程序集已设为专用的应用程序可执行文件的完整路径。

[in] dwInstallMode

定义安装模式。 此参数的取值可为下列值之一:

含义
INSTALLMODE_DEFAULT
提供组件并执行提供组件所需的任何安装。 如果缺少所请求功能中某个组件的关键文件或功能父级,请使用 MsiReinstallFeature 重新安装功能,并设置以下标志位:REINSTALLMODE_FILEMISSING、REINSTALLMODE_FILEOLDERVERSION、REINSTALLMODE_FILEVERIFY、REINSTALLMODE_MACHINEDATA、REINSTALLMODE_USERDATA和REINSTALLMODE_SHORTCUT。
INSTALLMODE_EXISTING
仅当功能存在时提供组件。 否则返回ERROR_FILE_NOT_FOUND。

此模式验证组件的密钥文件是否存在。

INSTALLMODE_NODETECTION
仅当功能存在时提供组件。 否则返回ERROR_FILE_NOT_FOUND。

此模式仅检查组件是否已注册,不验证组件的密钥文件是否存在。

INSTALLMODE_NOSOURCERESOLUTION
仅当功能的安装状态为INSTALLSTATE_LOCAL时,才提供组件。 如果功能安装状态为INSTALLSTATE_SOURCE,则返回ERROR_INSTALL_SOURCE_ABSENT。 否则返回ERROR_FILE_NOT_FOUND。 此模式仅检查组件是否已注册,不验证密钥文件是否存在。
INSTALLMODE_NODETECTION_ANY
如果存在来自任何已安装产品的功能,请提供组件。 否则返回ERROR_FILE_NOT_FOUND。 此模式仅检查组件是否已注册,不验证组件的密钥文件是否存在。 此标志类似于INSTALLMODE_NODETECTION标志,但使用此标志,我们检查已安装程序集(而不是最后一个产品)的任何产品,如INSTALLMODE_NODETECTION标志的情况一样。 此标志只能与 MsiProvideAssembly 一起使用。
REINSTALLMODE 标志的组合
调用 MsiReinstallFeature 以使用 dwReinstallMode 参数的此参数重新安装功能,然后提供组件。

[in] dwAssemblyInfo

程序集信息和程序集类型。 设置为以下值之一。

含义
MSIASSEMBLYINFO_NETASSEMBLY
0
.NET 程序集
MSIASSEMBLYINFO_WIN32ASSEMBLY
1
Win32 程序集

[out] lpPathBuf

指向接收组件路径的变量的指针。 此参数可以为 null。

[in, out] pcchPathBuf

指向变量的指针,该变量指定 lpPathBuf 参数指向的缓冲区的大小(以字符为单位)。 输入时,这是缓冲区的完整大小,包括终止 null 字符的空格。 如果传入的缓冲区太小,则返回的计数不包括终止 null 字符。

如果 lpPathBuf 为 null, 则 pcchPathBuf 可以为 null。

返回值

含义
ERROR_BAD_CONFIGURATION
配置数据已损坏。
ERROR_FILE_NOT_FOUND
该功能不存在或损坏。 dwInstallMode = INSTALLMODE_EXISTING 返回此错误。
ERROR_INSTALL_FAILURE
安装失败。
ERROR_INSTALL_NOTUSED
正在请求的组件在计算机上处于禁用状态。
ERROR_INVALID_PARAMETER
向该函数传递了无效参数。
ERROR_SUCCESS
函数已成功完成。
ERROR_UNKNOWN_FEATURE
功能 ID 不标识已知功能。
ERROR_UNKNOWN_COMPONENT
组件 ID 未指定已知组件。
ERROR_UNKNOWN_PRODUCT
产品代码未标识已知产品。
INSTALLSTATE_UNKNOWN
无法识别的产品或功能名称已传递给函数。
ERROR_MORE_DATA
返回缓冲区溢出。
ERROR_NOT_ENOUGH_MEMORY
系统没有足够的内存来完成操作。 适用于 Windows Server 2003。
ERROR_INSTALL_SOURCE_ABSENT
无法检测源。
 

有关详细信息,请参阅 显示的错误消息

注解

当 MsiProvideAssembly 函数成功时,pcchPathBuf 参数包含 lpPathBuf 中字符串的长度。

INSTALLMODE_EXISTING选项不能与 REINSTALLMODE 标志结合使用。

包含包含损坏文件或错误版本的文件的组件的功能必须由用户显式重新安装,或者让应用程序调用 MsiReinstallFeature

注意

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

另请参阅

特定于组件的函数

多包安装