パッチのシーケンス処理
Windows インストーラー 3.0 以降では、作成者は MsiPatchSequence テーブルでパッチ パッケージ データベースにパッチのシーケンス処理情報を追加できます。 インストーラーではこの情報が、インストール パッケージに適用可能なパッチの決定、最適なパッチの順序の決定、システムに提供される順序に関係なく、一定の順序でのパッチのインストールの際に使用されます。
Windows インストーラー 2.0: サポートされていません。 Windows インストーラー 3.0 より前のバージョンの Windows インストーラーでは、MsiPatchSequence テーブルが含まれているかどうかに関係なく、システムに提供される順序でパッチがインストールされます。
パッチのシーケンス処理機能を使用するには、次が必要です。
- パッチ パッケージ (.msp ファイル) には、シーケンス処理情報を含む MsiPatchSequence テーブルが必要です。 インストーラーでは、MsiPatchSequence テーブルがないパッチはシステムに提供された順序でインストールされます。
- Windows インストーラー 3.0 以降を使用してパッチをインストールします。
Windows インストーラー バージョン 3.0 には、アプリケーションで最適なパッチ適用順序の決定に使用される次の関数が用意されています。
- MsiDeterminePatchSequence 関数では、パッチの一覧を取得し、インストールされている製品に適用できる順序を決定します。 この関数では、システムに既にインストールされているパッチや製品が対象とされます。
- MsiDetermineApplicablePatches 関数では、パッチの一覧を取得し、インストールされている製品に適用できる順序を決定します。 この関数では、システムに既にインストールされているパッチや製品は対象とされません。
Windows インストーラー バージョン 3.0 では、1 回のパッチ適用インストールで製品に複数のパッチを適用できます。 パッチのグループには、パッチ適用のシーケンス情報 (MsiPatchSequence テーブル) を含むパッチと含まないパッチを含めることができます。 Windows インストーラーでは、システムに提供される順序で、このテーブルを含まないパッチ パッケージがインストールされます。 インストーラーでは、MsiPatchSequence テーブルがなくても、次のセクションで説明するメソッドによって古いパッチまたは置き換えられたパッチとしてマークされているパッチ パッケージを対象とします。
Windows インストーラー バージョン 3.0 で複数のパッチがインストールされる場合は、次の手順に従って、製品に個々のパッチが適用されるシーケンスが決定されます。
MsiPatchSequence テーブルのないインストールされたパッチは、製品に適用された順序でシーケンスに配置されます。 適用された最初のパッチは、シーケンスの最初に配置されます。
MsiPatchSequence テーブルのない新しいパッチがシーケンスに配置されます。 これらのパッチは、現在のパッチ適用インストールによって適用されています。 システムに提供される順序で配置され、手順 1 のすべてのパッチの後に配置されます。
古いパッチは、パッチのシーケンスから除外されます。
Note
パッチ パッケージでは、Revision Number Summary プロパティで、パッチによって削除される古いパッチの明示的な一覧を指定できます。 この一覧は、バージョン 3.0 より前のバージョンの Windows インストーラーで使用することを目的としています。 Windows インストーラー バージョン 3.0 では、パッチに MsiPatchSequence テーブルがない場合にのみ、古いものとしてマークされたパッチをシーケンスから除外します。
インストーラーでは、パッチの適用シーケンスをステップ実行し、特定のシーケンスで適用可能なパッチを決定します。 1 つの製品に複数のパッチが適用されると、シーケンス内の各パッチでも製品のインストール データベース (.msi ファイル) が変換されます。 パッチは、上記のすべてのパッチ パッケージの変換を製品データベースに適用した結果として、そのデータベース変換で product code、version、language、upgradecode が取得できる場合にのみ、特定のシーケンスに適用できます。 インストーラーでは、適用できないパッチはシーケンスから除外されます。
インストーラーでは、MsiPatchSequence テーブルにシーケンス処理情報を含むパッチを配置し始めます。 MsiPatchSequence テーブルを持つマイナー アップグレード パッチは、前の手順でシーケンス処理されたパッチの後に、アップグレード後の製品バージョンが最も低いものから順にシーケンスに配置されます。 その後、Windows インストーラーでは、このシーケンスで適用できないマイナー アップグレード パッチが除外されます。
MsiPatchSequence テーブルを持つマイナー アップグレードを対象とする小さな更新プログラム パッチは、シーケンス内のマイナー アップグレード パッチの最上位バージョンに割り当てられます。
前の手順の後に未割り当てのままであり、MsiPatchSequence テーブルを持つすべての小さな更新プログラム パッチは、MsiPatchSequence テーブルを持つ最初のマイナー アップグレードの前、および .msi インストール データベースと MsiPatchSequence テーブルのないパッチの後にシーケンスに配置されます。 その後、Windows インストーラーでは、このシーケンスで適用できない小さな更新プログラム パッチが除外されます。
Windows インストーラー バージョン 3.0 では、置き換えられたパッチがシーケンスから除外されます。 パッチ シーケンスで先に発生したパッチにパッチの置き換えがあると、パッチには以前のパッチのすべての修正プログラムが含まれます。 以前のパッチは不要になります。 Windows インストーラーでは、置き換えられたパッチを排除するために、MsiPatchSequence テーブルの情報が必要になります。
Note
すべてのパッチ ファミリの以前のパッチを置き換えるために、以前のパッチ セットを置き換えることを意図したパッチを作成する必要があります。 小さな更新プログラム パッチは、小さな更新プログラムにのみ置き換えることができます。 マイナー アップグレードは、小さな更新プログラムとその他のマイナー アップグレードの両方に置き換えることができます。
MsiPatchSequence テーブルを含む小さな更新プログラム パッチは、MsiPatchSequence テーブルのシーケンス処理情報に従って製品バージョン内でシーケンスされます。 これにより、最終的なパッチの順序が決まります。
使われなくなったパッチは、パッチ適用シーケンスから除外できます。 パッチ適用シーケンスからパッチを除外する方法について詳しくは、「パッチの除外」を参照してください。
MsiPatchSequence テーブルを使用してパッチを作成順に適用する方法の例については、「複数パッチの適用例」を参照してください。