アセンブリを更新する

このトピックの情報では、Windows インストーラーのパッチを使用してアセンブリを更新するための推奨ガイドラインを示します。

アセンブリ更新プログラムの作成者は、すべての種類のアセンブリに適用される次のガイドラインを使用できます。

  • アセンブリを更新するには、MsiAssemblyName テーブル内のアセンブリの厳密な名前を変更することをお勧めします。 新しいアセンブリ バージョンは、新しいコンポーネントによって提供されることも、古いバージョンを提供する同じコンポーネントによって提供されることもあります。
  • 新しいアセンブリ バージョンが同じコンポーネントによって提供される場合は、アセンブリの種類を .NET Framework アセンブリから Win32 アセンブリに変更しないでください。その逆も同様です。
  • システム上のすべてのアプリケーションで更新済みのアセンブリを使用する必要がある場合は、ポリシー アセンブリを展開する必要があります。 ポリシー アセンブリでは、新しいアセンブリ バージョンを使用するようにシステム上のアプリケーションをリダイレクトできます。 ポリシー アセンブリは、新しいコンポーネントを作成することによって提供する必要があります。
  • アセンブリ更新プログラムをアンインストールするには、Windows インストーラー 3.0 以降が必要です。 詳細については、「パッチの削除」を参照してください。
  • 新しいバージョンのアセンブリには、以前にリリースされたアセンブリの同じバージョン以上のファイルが含まれている必要があります。
  • Windows インストーラー 3.0 では、完全なファイル置換または小規模な差分更新によって、.NET Framework アセンブリと Win32 アセンブリに対応できます。 詳細については、「パッチ サイズの縮小」を参照してください。
  • 更新プログラムによってアセンブリの厳密な名前が変更された場合、パッチ パッケージに MsiPatchSequence テーブルがなければ、MsiPatchOldAssemblyFile テーブルと MsiPatchOldAssemblyName テーブルが必要です。 パッチ パッケージの MsiPatchSequence テーブルにパッチ シーケンス情報が含まれている場合、MsiPatchOldAssemblyFile テーブルと MsiPatchOldAssemblyName テーブルは必要ありません。
  • 新しいパッチをリリースする前に、以前にリリースされたすべてのパッチを適用してパッチをテストします。

Win32 アセンブリの更新

Win32 アセンブリを更新するときは、次のガイドラインを使用します。

  • MsiAssemblyName テーブルで指定されている新しいアセンブリの厳密な名前を変更します。
  • システム上の他のアプリケーションで使用されているアセンブリ バージョンに影響を与えることなく、アプリケーションで常に新しいバージョンのアセンブリを使用する場合は、新しいアセンブリ バージョンを含む、古いアセンブリ バージョンに使用したのと同じコンポーネントを使用します。 Component テーブル内で同じ ComponentId を保持します。 アプリケーションにパッチを適用すると、新しいバージョンのアセンブリへの参照のみが保持されます。 古いバージョンのアセンブリは、グローバル アセンブリ キャッシュ内に新しいバージョンと共に残すことができます。 これは、古いバージョンのアセンブリを使用する、システム上の他のアプリケーションには影響を与えません。 新しいバージョンと古いバージョンの両方のアセンブリで同じコンポーネントが使用される場合、更新プログラムは小さな差分パッチにすることができます。
  • 新しいバージョンのアセンブリが、アプリケーションをインストールする一部のシステムと互換性がない場合は、新しいバージョンと古いバージョンのアセンブリをサイド バイ サイド アセンブリとしてインストールできます。 両方のアセンブリ バージョンをサイド バイ サイドでインストールするには、新しいアセンブリ バージョンを含む新しいコンポーネントを作成します。 新しいコンポーネントの Component テーブルの ComponentId は、古いバージョンのコンポーネントの ComponentId とは異なる必要があります。 アプリケーションにパッチを適用すると、両方のアセンブリ バージョンへの参照が保持されます。 その後、アプリケーションは、マニフェストによって互換性のあるバージョンのアセンブリに送ることができます。 新しいバージョンと古いバージョンのアセンブリで異なるコンポーネントが使用される場合、更新プログラムでは完全なファイル置換が使用されます。

.NET Framework アセンブリの更新

.NET Framework アセンブリを更新する場合は、次のガイドラインを使用します。

  • MsiAssemblyName テーブルで指定されている新しいアセンブリの厳密な名前を変更します。

  • システム上の他のアプリケーションで使用されているアセンブリ バージョンに影響を与えることなく、アプリケーションで常に新しいバージョンのアセンブリを使用する場合は、MsiAssemblyName テーブルで指定されている新しいアセンブリの厳密な名前を変更し、新しいアセンブリ バージョンを含む、古いアセンブリ バージョンに使用したのと同じコンポーネントを使用します。 Component テーブル内で同じ ComponentId を保持します。 アプリケーションにパッチを適用すると、新しいバージョンのアセンブリへの参照のみが保持されます。 古いバージョンのアセンブリは、グローバル キャッシュ内に新しいバージョンと共に残すことができます。 これは、古いバージョンのアセンブリを使用する、システム上の他のアプリケーションには影響を与えません。 新しいバージョンと古いバージョンの両方のアセンブリで同じコンポーネントが使用される場合、更新プログラムは小さな差分パッチにすることができます。

  • 新しいバージョンのアセンブリが、アプリケーションをインストールする一部のシステムと互換性がない場合は、新しいバージョンと古いバージョンのアセンブリをサイド バイ サイド アセンブリとしてインストールできます。 両方のアセンブリ バージョンをサイド バイ サイドでインストールするには、MsiAssemblyName テーブルで指定されている新しいアセンブリの厳密な名前を変更し、新しいアセンブリ バージョンを含む新しいコンポーネントを作成します。 新しいコンポーネントの Component テーブルの ComponentId は、古いバージョンのコンポーネントの ComponentId とは異なる必要があります。 アプリケーションにパッチを適用すると、両方のアセンブリ バージョンへの参照が保持されます。 その後、アプリケーションは、マニフェストによって互換性のあるバージョンのアセンブリに送ることができます。 新しいバージョンと古いバージョンのアセンブリで異なるコンポーネントが使用される場合、更新プログラムでは完全なファイル置換が使用されます。

  • インプレース更新では、グローバル アセンブリ キャッシュ内の .NET Framework アセンブリのコピーが上書きされます。 この種類のアセンブリ更新では、アセンブリの厳密な名前は変更されません。 MsiAssemblyName テーブルの FileVersion フィールドの値のみが変更されます。 .NET Framework アセンブリのインプレース更新には、.NET Framework 1.1 SP1 以降が必要です。

    Note

    インプレース型の更新では、グローバル キャッシュ内のアセンブリのコピーが上書きされます。また、新しいバージョンのアセンブリに完全な下位互換性がない場合、他のアプリケーションが破損する可能性があります。 アセンブリを更新するには、MsiAssemblyName テーブル内のアセンブリの厳密な名前を変更することをお勧めします。