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 自定义操作的安装句柄,或通过 MsiOpenPackageMsiOpenPackageExMsiOpenProduct获取的安装句柄。

[in] szComponent

一个以 null 结尾的字符串,指定组件的名称,因为它列在 组件表的组件列中。 此参数可以为 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 开始,并在每次调用后按一个递增。 只要 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
目标平台 窗户
标头 msiquery.h
Msi.lib
DLL Msi.dll