MsiEnumProductsExA 函式 (msi.h)
MsiEnumProductsEx 函式會列舉目前在指定內容中公告或安裝的產品實例。 此函式會取代 MsiEnumProducts。
語法
UINT MsiEnumProductsExA(
[in, optional] LPCSTR szProductCode,
[in] LPCSTR szUserSid,
[in] DWORD dwContext,
[in] DWORD dwIndex,
[out, optional] CHAR [39] szInstalledProductCode,
[out, optional] MSIINSTALLCONTEXT *pdwInstalledContext,
[out, optional] LPSTR szSid,
[in, out, optional] LPDWORD pcchSid
);
參數
[in, optional] szProductCode
要列舉之產品的 ProductCode GUID。 只會列舉 szUserSid 和 dwContext 參數所指定內容範圍內的產品實例。 此參數可以設定為 NULL,以列舉指定內容中的所有產品。
[in] szUserSid
Null 終止的字串,指定限制列舉內容的安全性識別碼 (SID)。 特殊的 SID 字串 s-1-1-0 (Everyone) 會指定系統中所有使用者的列舉。 s-1-1-0 以外的 SID 值會被視為 user-SID,並將列舉限制為目前使用者或系統中的任何使用者。 這個參數可以設定為 NULL,以將列舉範圍限製為目前使用者。
SID 類型 | 意義 |
---|---|
|
指定目前登入的使用者。 |
|
指定系統中特定用戶的列舉。 使用者 SID 的範例是 “S-1-3-64-2415071341-1358098788-3127455600-2561”。 |
|
指定系統中所有用戶的列舉。 |
[in] dwContext
將列舉限制為內容。 此參數可以是下表所示值的任何一個或組合。
[in] dwIndex
指定要擷取的產品索引。 此參數必須是零,MsiEnumProductsEx 函式的第一次呼叫,然後針對後續呼叫遞增。 只有當先前的呼叫傳回ERROR_SUCCESS時,才應該遞增索引。 由於產品未訂購,因此任何新產品都有任意索引。 這表示函式可以依任何順序傳回產品。
[out, optional] szInstalledProductCode
以 Null 結束的 TCHAR 字串
[out, optional] pdwInstalledContext
傳回所列舉之產品實例的內容。 輸出值可以是MSIINSTALLCONTEXT_USERMANAGED、MSIINSTALLCONTEXT_USERUNMANAGED或MSIINSTALLCONTEXT_MACHINE。 此參數可以是 NULL
[out, optional] szSid
輸出緩衝區,接收此產品實例所在的帳戶字串SID。 這個緩衝區會針對安裝在每部機器內容中的實例傳回空字串。
此緩衝區應該夠大,足以包含 SID。 如果緩衝區太小,函式會傳回ERROR_MORE_DATA,並將 *pcchSid 設定為 SID 中 TCHAR 的數目,不包括終止的 NULL 字元。
如果 szSid 設定為 NULL,且 pcchSid 設為有效的指標,則函式會傳回ERROR_SUCCESS,並將 *pcchSid 設定為值中的 TCHAR 數目,不包括終止 NULL。 接著可以再次呼叫 函式來擷取值,其中 szSid 緩衝區夠大,足以包含 *pcchSid + 1 個字符。
如果 szSid 和 pcchSid 都設定為 NULL,則函式會傳回ERROR_SUCCESS值,而不擷取值。
[in, out, optional] pcchSid
呼叫 函式時,此參數應該是變數的指標,指定 szSid 緩衝區中 TCHAR 的數目。 當函式傳回時,此參數會設定為要求值的大小,不論函式是否會將值複製到指定的緩衝區。 大小會以要求值中的 TCHAR 數目傳回,不包括終止的 Null 字元。
只有當 szSid 也 NULL時,這個參數才能設定為 NULL,否則函式會傳回ERROR_INVALID_PARAMETER。
傳回值
MsiEnumProductsEx 函式會傳回下列其中一個值。
傳回碼 | 描述 |
---|---|
|
如果範圍包含目前使用者以外的使用者,您需要系統管理員許可權。 |
|
組態數據已損毀。 |
|
無效的參數已傳遞至函式。 |
|
沒有其他要列舉的產品。 |
|
列舉產品。 |
|
szSid 參數太小,無法取得使用者 SID。 |
|
產品不會安裝在指定內容中的電腦上。 |
|
非預期的內部失敗。 |
言論
若要列舉產品,應用程式一開始必須呼叫
對 MsiEnumProductsEx 進行多個呼叫時, 列舉所有產品,每個呼叫都必須從相同的線程進行。
用戶必須具有系統管理員許可權,才能列舉所有用戶帳戶或目前用戶帳戶以外的使用者帳戶的產品。 列舉會在列舉目前使用者以外的所有用戶或使用者以外的使用者時,略過僅公告的產品(例如未安裝的產品)。
使用 MsiGetProductInfoEx 取得 MsiEnumProductsEx列舉之每個產品實例的狀態或其他資訊。
注意
msi.h 標頭會根據 UNICODE 預處理器常數的定義,將 MsiEnumProductsEx 定義為自動選取此函式的 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 3.0 或更新版本。 如需 Windows Installer 版本所需的最低 Windows Service Pack 相關信息,請參閱 Windows Installer Run-Time 需求。 |
目標平臺 | 窗戶 |
標頭 | msi.h |
連結庫 | Msi.lib |
DLL | Msi.dll |