次の方法で共有


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、MsiOpenPackageEx、または MsiOpenProduct使用して取得されるインストールを処理します。

[in] szComponent

Component テーブルの Component 列に表示されるコンポーネントの名前を指定する null で終わる文字列。 このパラメーターには null を指定できます。 szComponent が null または空の文字列の場合、MsiEnumComponentCosts は、インストール時に使用されたドライブあたりのディスク領域の合計を列挙します。 この場合、iState は無視されます。 インストーラーのコストには、セキュリティで保護されたフォルダーにデータベースをキャッシュするためのコストと、インストール スクリプトを作成するためのコストが含まれます。 インストール時に使用されるディスク領域の合計が、コンポーネントのインストール後に使用される領域よりも大きくなる可能性があることに注意してください。

[in] dwIndex

ドライブの 0 から始まるインデックス。 このパラメーターは、MsiEnumComponentCosts 関数への最初の呼び出しでは 0 にし、その後の呼び出しではインクリメントする必要があります。

[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 インストーラーのコストの合計です (szComponent = null)。

手記

msiquery.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして MsiEnumComponentCosts を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー
ターゲット プラットフォーム の ウィンドウズ
ヘッダー msiquery.h
ライブラリ Msi.lib
DLL Msi.dll