MsiEnumProductsExW 関数 (msi.h)

MsiEnumProductsEx 関数は、指定されたコンテキストで現在アドバタイズまたはインストールされている製品の 1 つまたはすべてのインスタンスを列挙します。 この関数は 、MsiEnumProducts よりも優先されます。

構文

UINT MsiEnumProductsExW(
  [in, optional]      LPCWSTR           szProductCode,
  [in]                LPCWSTR           szUserSid,
  [in]                DWORD             dwContext,
  [in]                DWORD             dwIndex,
  [out, optional]     WCHAR [39]        szInstalledProductCode,
  [out, optional]     MSIINSTALLCONTEXT *pdwInstalledContext,
  [out, optional]     LPWSTR            szSid,
  [in, out, optional] LPDWORD           pcchSid
);

パラメーター

[in, optional] szProductCode

Productcode 列挙する製品の GUID。 szUserSid パラメーターと dwContext パラメーターで指定されたコンテキストのスコープ内の製品のインスタンスのみが列挙されます。 このパラメーターを NULL に設定すると、指定したコンテキスト内のすべての製品を列挙できます。

[in] szUserSid

列挙体のコンテキストを制限するセキュリティ識別子 (SID) を指定する Null で終わる文字列。 特殊な SID 文字列 s-1-1-0 (Everyone) は、システム内のすべてのユーザーの列挙を指定します。 s-1-1-0 以外の SID 値はユーザー SID と見なされ、列挙を現在のユーザーまたはシステム内の任意のユーザーに制限します。 列挙範囲を現在のユーザーに制限するには、このパラメーターを NULL に設定できます。

SID の種類 説明
NULL
現在ログオンしているユーザーを指定します。
ユーザー SID
システム内の特定のユーザーの列挙を指定します。 ユーザー SID の例として、"S-1-3-64-2415071341-1358098788-3127455600-2561" があります。
s-1-1-0
システム内のすべてのユーザーの列挙を指定します。
 
メモ 特殊な SID 文字列 s-1-5-18 (システム) を使用して、マシンごとにインストールされている製品またはパッチを列挙することはできません。 dwContext が MSIINSTALLCONTEXT_MACHINE のみに設定されている場合、szUserSidNULL である必要があります。
 

[in] dwContext

列挙をコンテキストに制限します。 このパラメーターには、次の表に示す値の任意の 1 つまたは組み合わせを指定できます。

Context 説明
MSIINSTALLCONTEXT_USERMANAGED
列挙は、 szUserSid で指定されたユーザーのすべてのユーザー管理インストールに拡張されます。 無効な SID はアイテムを返しません。
MSIINSTALLCONTEXT_USERUNMANAGED
列挙は、 szUserSid で指定されたユーザーのすべてのユーザーごとのアンマネージド インストールに拡張されます。 無効な SID はアイテムを返しません。
MSIINSTALLCONTEXT_MACHINE
列挙は、すべてのマシンごとのインストールに拡張されます。 dwInstallContext がMSIINSTALLCONTEXT_MACHINEのみに設定されている場合、szUserSID パラメーターは NULL である必要があります。

[in] dwIndex

取得する製品のインデックスを指定します。 このパラメーターは、 MsiEnumProductsEx 関数の最初の呼び出しでは 0 で、その後の呼び出しではインクリメントする必要があります。 前の呼び出しがERROR_SUCCESS返された場合にのみ、インデックスをインクリメントする必要があります。 製品は順序付けされていないので、新しい製品には任意のインデックスが付けられます。 つまり、関数は任意の順序で製品を返すことができます。

[out, optional] szInstalledProductCode

列挙される製品インスタンスの ProductCode GUID を提供する TCHAR の Null で終わる文字列。 このパラメーターは、NULL でもかまいません。

[out, optional] pdwInstalledContext

列挙される製品インスタンスのコンテキストを返します。 出力値は、MSIINSTALLCONTEXT_USERMANAGED、MSIINSTALLCONTEXT_USERUNMANAGED、またはMSIINSTALLCONTEXT_MACHINEできます。 このパラメーターは、NULL でもかまいません。

[out, optional] szSid

この製品インスタンスが存在するアカウントの文字列 SID を受け取る出力バッファー。 このバッファーは、マシンごとのコンテキストにインストールされているインスタンスの空の文字列を返します。

このバッファーは、SID を格納するのに十分な大きさである必要があります。 バッファーが小さすぎる場合、関数は ERROR_MORE_DATAを返し、*pcchSid を SID 内の TCHAR の数に設定します。終端の NULL 文字は含まれません。

szSidNULL に設定され、pcchSid が有効なポインターに設定されている場合、この関数は ERROR_SUCCESSを返し、終了する NULL を含まない値の TCHAR の数に *pcchSid を設定します。 関数を再度呼び出して値を取得し、*pcchSid + 1 文字を格納するのに十分な大きさの szSid バッファーを使用できます。

szSidpcchSid の両方が NULL に設定されている場合、値が存在する場合、関数は値を取得せずにERROR_SUCCESSを返します。

[in, out, optional] pcchSid

関数を呼び出すとき、このパラメーターは、szSid バッファー内の TCHAR の数を指定する変数へのポインターである必要があります。 関数が戻るとき、関数が指定したバッファーに値をコピーするかどうかに関係なく、このパラメーターは要求された値のサイズに設定されます。 サイズは、要求された値の TCHAR の数として返されます。終端の null 文字は含まれません。

このパラメーターは、szSidNULL の場合にのみ NULL に設定できます。それ以外の場合、関数はERROR_INVALID_PARAMETERを返します。

戻り値

MsiEnumProductsEx 関数は、次のいずれかの値を返します。

リターン コード 説明
ERROR_ACCESS_DENIED
スコープに現在のユーザー以外のユーザーが含まれている場合は、管理者特権が必要です。
ERROR_BAD_CONFIGURATION
構成データが破損しています。
ERROR_INVALID_PARAMETER
無効なパラメーターが関数に渡されました。
ERROR_NO_MORE_ITEMS
列挙する製品はこれ以上ありません。
ERROR_SUCCESS
製品が列挙されます。
ERROR_MORE_DATA
szSid パラメーターが小さすぎて、ユーザー SID を取得する必要があります。
ERROR_UNKNOWN_PRODUCT
指定したコンテキストで、製品がコンピューターにインストールされていません。
ERROR_FUNCTION_FAILED
予期しない内部エラー。

解説

製品を列挙するには、iIndex パラメーターを 0 に設定して MsiEnumProductsEx 関数を最初に呼び出す必要があります。 その後、アプリケーションは iProductIndex パラメーターをインクリメントし、ERROR_NO_MORE_ITEMSを返し、列挙する製品がなくなったまで MsiEnumProductsEx を呼び出す必要があります。

MsiEnumProductsEx を複数回呼び出してすべての製品を列挙する場合、各呼び出しは同じスレッドから行う必要があります。

すべてのユーザー アカウントまたは現在のユーザー アカウント以外のユーザー アカウント全体で製品を列挙するには、ユーザーに管理者権限が必要です。 列挙では、すべてのユーザーまたは現在のユーザー以外のユーザーを列挙するときに、ユーザーごとのアンマネージド コンテキストでアドバタイズされる製品 (インストールされていない製品など) のみがスキップされます。

MsiEnumProductsEx によって列挙された各製品インスタンスに関する状態またはその他の情報を取得するには、MsiGetProductInfoEx を使用します。

Note

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

要件

   
サポートされている最小のクライアント 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 インストーラー 3.0 以降。 Windows インストーラーのバージョンに必要な最小の Windows Service Pack については、Windows インストーラーの実行時の要件に関する記事を参照してください。
対象プラットフォーム Windows
ヘッダー msi.h
Library Msi.lib
[DLL] Msi.dll

関連項目

MsiEnumProducts

Windows インストーラー 2.0 以前ではサポートされていません

ProductCode

パッチの削除