共用方式為


MsiEnumComponentsExA 函式 (msi.h)

MsiEnumComponentsEx 函式會列舉已安裝的元件。 函式會在每次呼叫元件時擷取一個元件的元件程式代碼。 元件程式代碼是元件、版本和語言唯一的字串 GUID。

Windows Installer 4.5 或更早版本:不支援 。 從 Windows Installer 5.0 開始,即可使用此函式。

語法

UINT MsiEnumComponentsExA(
  [in, optional]  LPCSTR            szUserSid,
  [in]            DWORD             dwContext,
  [in]            DWORD             dwIndex,
  [out, optional] CHAR [39]         szInstalledComponentCode,
  [out, optional] MSIINSTALLCONTEXT *pdwInstalledContext,
  [out, optional] LPSTR             szSid,
  [in, out]       LPDWORD           pcchSid
);

參數

[in, optional] szUserSid

以 Null 結尾的字串,其中包含安全性識別碼 (SID.)已安裝元件的列舉延伸至此 SID 所識別的使用者。 特殊 SID 字串 s-1-1-0 (Everyone) 會指定系統中所有使用者所有產品中所有已安裝元件的列舉。 s-1-1-0 以外的 SID 值會指定特定使用者的使用者 SID,並將列舉限制為指定使用者所安裝之應用程式的實例。

SID 類型 意義
NULL
指定目前登入的使用者。
使用者 SID
系統中特定用戶的列舉。 使用者 SID 的範例是 “S-1-3-64-2415071341-1358098788-3127455600-2561”。
s-1-1-0
指定系統中的所有使用者。
 
附注  

特殊 SID 字串 s-1-5-18 (系統) 無法用來列舉安裝在每部機器安裝內容中的應用程式。 將 SID 值設定為 s-1-5-18 會傳回ERROR_INVALID_PARAMETER。 dwContext 設定為僅限MSIINSTALLCONTEXT_MACHINE時,szUserSid 必須 NULL

 

[in] dwContext

旗標,可將已安裝元件的列舉限制為指定安裝內容中所安裝產品實例。 列舉僅包含由 s szUserSid所指定使用者所安裝的產品實例。

意義
MSIINSTALLCONTEXT_USERMANAGED
1
包含存在於個別使用者管理安裝內容中的產品。
MSIINSTALLCONTEXT_USERUNMANAGED
2
包含存在於個別使用者-Unmanaged 安裝內容中的產品。
MSIINSTALLCONTEXT_MACHINE
4
包含存在於每部計算機安裝內容中的產品。 當 dwInstallContext 設定為MSIINSTALLCONTEXT_MACHINE時,szUserSID 參數必須 NULL

[in] dwIndex

指定要擷取之元件的索引。 此參數必須是零 (0),才能第一次 呼叫 msiEnumComponentsEx 函式。 針對每個後續呼叫,索引必須遞增 1。 只有當上一次呼叫函式傳回ERROR_SUCCESS時,才應該遞增索引。 元件不會排序,而且函式可以依任何順序傳回。

[out, optional] szInstalledComponentCode

輸出緩衝區,接收已安裝元件的元件程式代碼 GUID。 緩衝區的長度應該足以容納包含元件程式代碼的 Null 終止字串值。 前 38 個 TCHAR 字元會接收元件的 GUID,而第 39 個字元則會收到終止的 NULL 字元。

[out, optional] pdwInstalledContext

旗標,提供安裝內容安裝元件的應用程式。

意義
MSIINSTALLCONTEXT_USERMANAGED
1
應用程式會安裝在每個使用者管理的安裝內容中。
MSIINSTALLCONTEXT_USERUNMANAGED
2
應用程式會安裝在每個使用者-Unmanaged 安裝內容中。
MSIINSTALLCONTEXT_MACHINE
4
應用程式會安裝在每部電腦安裝內容中。

[out, optional] szSid

接收安全性識別碼 (SID),識別已安裝擁有元件之應用程式的使用者。 如果應用程式實例安裝在每部計算機安裝內容中,位置就會收到空字串。

這個位置的緩衝區長度應該夠大,足以保存包含 SID 的 Null 終止字串值。 如果緩衝區太小,函式會傳回 ERROR_MORE_DATA,而pcchSid所指向的位置 會接收 SID 中 TCHAR 的數目,不包括終止的 NULL 字元。

如果 szSid 設為 NULL,且 pcchSid 是記憶體中位置的有效指標,則函式會傳回 ERROR_SUCCESS,而且位置會接收 SID 中 TCHAR 的數目,不包括終止的 null 字元。 然後,您可以再次呼叫 函式來擷取值,其中 szSid 緩衝區大小足以包含 *pcchSid + 1 個字元。

SID 類型 意義
空字串
應用程式會安裝在每部機器安裝內容中。
使用者 SID
安裝應用程式之系統中使用者的 SID。

[in, out] pcchSid

接收 SID 中 TCHAR 的數目,不包括終止的 Null 字元。 當函式傳回時,此變數會設定為所要求的 SID 大小,不論函式能否成功將 SID 和終止 Null 字元複製到 szSid所指向的緩衝區位置。 大小會以要求值中的 TCHAR 數目傳回,不包括終止的 Null 字元。

只有當 szSidNULL時,這個參數才能設定為 NULL,否則函式會傳回 ERROR_INVALID_PARAMETER。 如果 szSidpcchSid 都設定為 NULL,則函式會傳回 ERROR_SUCCESS SID,而不會擷取 SID 值。

傳回值

MsiEnumProductsEx 函式會傳回下列其中一個值。

傳回碼 描述
ERROR_ACCESS_DENIED
需要系統管理員許可權,才能列舉目前使用者以外的使用者所安裝之應用程式的元件。
ERROR_BAD_CONFIGURATION
組態數據已損毀。
ERROR_INVALID_PARAMETER
無效的參數會傳遞至函式。
ERROR_NO_MORE_ITEMS
沒有其他要列舉的元件。
ERROR_SUCCESS
函式成功。
ERROR_MORE_DATA
提供的緩衝區太小,無法保存整個值。
ERROR_FUNCTION_FAILED
函式失敗。

言論

注意

msi.h 標頭會根據 UNICODE 預處理器常數的定義,將 MsiEnumComponentsEx 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 如需 Windows Installer 版本所需的最低 Windows Service Pack 相關信息,請參閱 Windows Installer Run-Time 需求。
目標平臺 窗戶
標頭 msi.h
連結庫 Msi.lib
DLL Msi.dll