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
目標平台 Windows
標頭 msiquery.h
程式庫 Msi.lib
Dll Msi.dll