Windows インストーラーを使用して製品とパッチをインベントリする

管理特権を持つユーザーとアプリケーションでは、Windows インストーラー関数を使用して、システムにインストールされている Windows インストーラー アプリケーション、機能、コンポーネント、パッチをインベントリできます。

Windows インストーラー 3.0 以降では、管理者特権を持つユーザーとアプリケーションでは、すべてのユーザーによってシステムにインストールされる Windows インストーラー アプリケーション、機能、コンポーネント、パッチを列挙できます。 管理者とアプリケーションでは、特定のユーザーまたはシステム内のすべてのユーザーの製品またはパッチに関する情報を取得できます。 アプリケーションでは、特定のユーザーの機能の状態またはコンポーネントの状態を取得できます。

Windows インストーラー 3.0 以降で使用できるインベントリ関数では、インストール コンテキストとユーザー コンテキストによって見つかる項目のスコープを制限できます。 インストール コンテキストとして考えられるのは、ユーザー単位、マシン単位、ユーザー単位 (マネージド) の 3 種類です。 ユーザー コンテキストには、システムの特定のユーザーまたはすべてのユーザーを指定できます。

Windows インストーラー 3.0 より前のバージョンの Windows インストーラー インベントリ関数では、コンピューター コンテキストまたは現在のユーザーのユーザーごとのコンテキストでのみ、システムにインストールされている項目を列挙できます。 この制限により、現在のユーザー以外のユーザーによってシステムにインストールされるすべての Windows インストーラー製品とパッチの完全なインベントリが防止されます。

製品の列挙

MsiEnumProductsEx 関数を使用して、システムにインストールされている Windows インストーラー アプリケーションを列挙します。 この関数では、現在のユーザーとシステム内の他のユーザーについて、アプリケーション (マネージドおよびアンマネージド) のマシンごとのインストールとユーザーごとのインストールをすべて検索できます。 検索するインストール コンテキストを指定するには、dwContext パラメーターを使用します。 可能なインストール コンテキストの 1 つまたは任意の組み合わせを指定できます。 検索するアプリケーションのユーザー コンテキストを指定するには、szUserSid パラメーターを使用します。

パッチの列挙

MsiEnumPatchesEx 関数を使用して、アプリケーションに適用されるパッチを検索します。 この関数では、特定のアプリケーションまたはシステム内のすべてのアプリケーションに適用されるパッチを検索できます。 この関数では、現在のユーザーとシステム内の他のユーザーについて、アプリケーション (マネージドおよびアンマネージド) のマシンごとのインストールとユーザーごとのインストールすべてに適用されたパッチを検索できます。

インストール コンテキストとユーザー コンテキストを使用して、パッチ列挙を特定のコンテキストまたはすべてのコンテキストに制限できます。 検索するインストール コンテキストを指定するには、dwContext パラメーターを使用します。 可能なインストール コンテキストの 1 つまたは任意の組み合わせを指定できます。 検索するアプリケーションのユーザー コンテキストを指定するには、szUserSid パラメーターを使用します。

システム内のすべてのユーザーによってアドバタイズまたはインストールされたすべての製品について適用されたパッチを列挙するには

  • MsiEnumPatchesEx 関数を呼び出します。
    • szProductCode パラメーターの値には NULL を使用します。
    • szUserSid パラメーターの値には "s-1-1-0" を使用します。
    • dwContext パラメーターの値には "MSIINSTALLCONTEXT_ALL" を使用します。

システム内のすべてのユーザーによってアドバタイズまたはインストールされたすべての製品について適用されたパッチを列挙するには

  1. MsiEnumProductsEx 関数を呼び出します。

    • szProductCode パラメーターの値には NULL を使用します。
    • szUserSid パラメーターの値には "s-1-1-0" を使用します。
    • dwContext パラメーターの値には "MSIINSTALLCONTEXT_ALL" を使用します。

    この関数では、検出された各アプリケーションの製品コード、ユーザー コンテキスト、インストール コンテキストを提供します。

  2. 手順 1 で列挙したアプリケーションごとに、MsiEnumPatchesEx を呼び出してパッチを列挙します。

    製品コード、ユーザー コンテキスト、MsiEnumProductsEx から取得したインストール コンテキストを、szProductCodeszUserSiddwContext、各 MsiEnumProductsEx 関数呼び出しの値に使用します。

製品情報の取得

MsiGetProductInfoEx 関数を使用して、システムにアドバタイズまたはインストールされているアプリケーションと、取得できるプロパティに関する情報を取得します。 この関数では、現在のユーザー以外のユーザー アカウントにインストールされているアプリケーションのインスタンスに関する情報を取得できますが、現在のユーザー以外のユーザー アカウントについて、ユーザーごとのアンマネージド コンテキストでアドバタイズされた製品のインスタンスに対するクエリを実行することはできません。

インストール コンテキストとユーザー コンテキストを指定して、特定のコンテキストでインストールされているアプリケーションに関する情報を制限できます。 検索するインストール コンテキストを指定するには、dwContext パラメーターを使用します。 指定できるインストール コンテキストは 1 つだけです。 検索するアプリケーションのユーザー コンテキストを指定するには、szUserSid パラメーターを使用します。

パッチ情報の取得

アプリケーションでは、MsiGetPatchInfoEx 関数を呼び出して、製品の指定されたインスタンスに対するパッチの適用に関する情報のクエリを実行できます。 LocalPackageTransformsState などのプロパティは、この関数を使用して取得できます。 ユーザーがコンピューターに現在ログインしていない場合、すべてのプロパティ値がユーザーごとのアンマネージド アプリケーションで使用できることが保証されるわけではありません。 指定できるインストール コンテキストは 1 つだけです。

インストール コンテキストとユーザー コンテキストを指定して、特定のコンテキストでインストールされているアプリケーションに適用されるパッチに情報を制限できます。 検索するインストール コンテキストを指定するには、dwContext パラメーターを使用します。 指定できるインストール コンテキストは 1 つだけです。 検索するアプリケーションのユーザー コンテキストを指定するには、szUserSid パラメーターを使用します。

コンポーネントの状態情報の取得

アプリケーションでは、MsiQueryComponentState 関数を呼び出して、コンポーネントのインストール済み状態を取得できます。 この関数によって、コンポーネントがローカルにインストールされているか、ソースから実行するためにインストールされているかを決定します。 この関数では、現在のユーザー以外のユーザー アカウントにインストールされているアプリケーションのインスタンスのコンポーネントに対してクエリを実行できます。ただし、これは、製品が現在のユーザー以外のユーザー アカウントのユーザーごとのアンマネージド コンテキストでアドバタイズされていない場合に限ります。

インストール コンテキストとユーザー コンテキストを指定して、特定のコンテキストでインストールされているアプリケーションのコンポーネントの状態を取得できます。 検索するインストール コンテキストを指定するには、dwContext パラメーターを使用します。 指定できるインストール コンテキストは 1 つだけです。 検索するアプリケーションのユーザー コンテキストを指定するには、szUserSid パラメーターを使用します。

機能の状態情報の取得

アプリケーションでは、MsiQueryFeatureStateEx 関数を呼び出して、製品機能のインストール済み状態を取得できます。 この関数によって、機能がアドバタイズされているか、ローカルにインストールされているか、ソースから実行するためにインストールされているかを決定します。 この関数を使用すると、マシン アカウント、現在のユーザー アカウントの任意のコンテキスト、または現在のユーザー以外の任意のユーザー アカウントのユーザーごとのマネージド コンテキストでインストールされているアプリケーションのインスタンスの任意の機能に対してクエリを実行できます。 この関数では、現在のユーザー以外のユーザー アカウントのユーザーごとのアンマネージド コンテキストでインストールされているアプリケーションに対してクエリを実行することはできません。 指定できるインストール コンテキストは 1 つだけです。

インストール コンテキストとユーザー コンテキストを指定して、特定のコンテキストでインストールされているアプリケーションの機能の状態を取得できます。 検索するインストール コンテキストを指定するには、dwContext パラメーターを使用します。 指定できるインストール コンテキストは 1 つだけです。 検索するアプリケーションのユーザー コンテキストを指定するには、szUserSid パラメーターを使用します。