MsiEnumComponentCostsW 函数 (msiquery.h)
MsiEnumComponentCosts 函数枚举安装组件所需的每个驱动器的磁盘空间。 需要此信息才能在用户界面中显示所有驱动器所需的磁盘空间成本。 返回的磁盘空间成本以 512 字节的倍数表示。
MsiEnumComponentCosts 应仅在安装程序完成文件成本计算和 CostFinalize 操作之后运行。 有关详细信息,请参阅文件成本计算。
语法
UINT MsiEnumComponentCostsW(
[in] MSIHANDLE hInstall,
[in] LPCWSTR szComponent,
[in] DWORD dwIndex,
[in] INSTALLSTATE iState,
[out] LPWSTR szDriveBuf,
[in, out] LPDWORD pcchDriveBuf,
[out] LPINT piCost,
[out] LPINT piTempCost
);
参数
[in] hInstall
提供给 DLL 自定义操作或通过 MsiOpenPackage、MsiOpenPackageEx 或 MsiOpenProduct 获取的安装的句柄。
[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 中的值表示安装期间所需的临时空间。 此临时空间要求是仅在安装期间所需的空间。 这不会影响最终磁盘空间要求。
返回值
返回值 | 含义 |
---|---|
|
配置数据已损坏。 |
|
向该函数传递了无效参数。 |
|
没有更多的驱动器要返回。 |
|
枚举了一个值。 |
|
缺少组件。 |
|
成本计算未完成。 |
|
缓冲区不够大,无法容纳驱动器名称。 |
|
提供的句柄无效或处于非活动状态。 |
注解
枚举每个驱动器的磁盘空间成本的建议方法如下。 从 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 |