MsiEnumComponentCostsA 函数 (msiquery.h)

MsiEnumComponentCosts 函数枚举安装组件所需的每个驱动器的磁盘空间。 需要此信息才能在用户界面中显示所有驱动器所需的磁盘空间成本。 返回的磁盘空间成本以 512 字节的倍数表示。

MsiEnumComponentCosts 应仅在安装程序完成文件成本计算和 CostFinalize 操作之后运行。 有关详细信息,请参阅文件成本计算

语法

UINT MsiEnumComponentCostsA(
  [in]      MSIHANDLE    hInstall,
  [in]      LPCSTR       szComponent,
  [in]      DWORD        dwIndex,
  [in]      INSTALLSTATE iState,
  [out]     LPSTR        szDriveBuf,
  [in, out] LPDWORD      pcchDriveBuf,
  [out]     LPINT        piCost,
  [out]     LPINT        piTempCost
);

参数

[in] hInstall

提供给 DLL 自定义操作或通过 MsiOpenPackage、MsiOpenPackageExMsiOpenProduct 获取的安装的句柄。

[in] szComponent

一个以 null 结尾的字符串,指定组件的名称,因为它列在 Component 表的“组件”列中。 此参数可以为 null。 如果 szComponent 为 null 或为空字符串, 则 MsiEnumComponentCosts 枚举安装期间使用的每个驱动器的总磁盘空间。 在这种情况下,将忽略 iState 。 安装程序的成本包括缓存安全文件夹中的数据库的成本,以及创建安装脚本的成本。 请注意,安装期间使用的总磁盘空间可能大于安装组件后使用的空间。

[in] dwIndex

驱动器的从 0 开始的索引。 对于第一次调用 MsiEnumComponentCosts 函数,此参数应为零,然后针对后续调用递增。

[in] iState

请求的要枚举的组件状态。 如果 szComponent 作为 Null 或空字符串传递,安装程序将忽略 iState 参数。

[out] szDriveBuf

保存驱动器名称(包括 null 终止符)的缓冲区。 这是一个空字符串,以防出错。

[in, out] pcchDriveBuf

指向变量的指针,该变量指定 lpDriveBuf 参数指向的缓冲区的大小(以 TCHAR 为单位)。 此大小应包括结尾的 null 字符。 如果提供的缓冲区太小, 则 pcchDriveBuf 指向的变量将包含不包括 null 终止符的字符计数。

[out] piCost

每个驱动器的组件成本,以 512 字节的倍数表示。 如果发生错误,则此值为 0。 piCost 中返回的值是安装后组件使用的最终磁盘空间。 如果 szComponent 作为 Null 或空字符串传递,安装程序会将 piCost 处的值设置为 0。

[out] piTempCost

安装期间每个驱动器的组件成本;如果发生错误,则为 0。 *piTempCost 中的值表示安装期间所需的临时空间。 此临时空间要求是仅在安装期间所需的空间。 这不会影响最终磁盘空间要求。

返回值

返回值 含义
ERROR_INVALID_HANDLE_STATE
配置数据已损坏。
ERROR_INVALID_PARAMETER
向该函数传递了无效参数。
ERROR_NO_MORE_ITEMS
没有更多的驱动器要返回。
ERROR_SUCCESS
枚举了一个值。
ERROR_UNKNOWN_COMPONENT
缺少组件。
ERROR_FUNCTION_NOT_CALLED
成本计算未完成。
ERROR_MORE_DATA
缓冲区不够大,无法容纳驱动器名称。
ERROR_INVALID_HANDLE
提供的句柄无效或处于非活动状态。
 
 

注解

枚举每个驱动器的磁盘空间成本的建议方法如下。 从 dwIndex 设置为 0 开始,并在每次调用后按 1 递增。 只要 MsiEnumComponentCosts 返回ERROR_SUCCESS,则继续枚举。

可以从自定义操作调用 MsiEnumComponentCosts

安装的总最终磁盘成本是所有组件的成本加上 Windows Installer (szComponent = null) 成本的总和。

注意

msiquery.h 标头将 MsiEnumComponentCosts 定义为别名,该别名根据 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
标头 msiquery.h
Library Msi.lib
DLL Msi.dll