修正プログラムによる元のインストール ソースへのアクセスが必要なくなるようにする

修正プログラムを適用する際に元のインストール ソースへのアクセスが必要になるすべての状況を排除することはできません。

次の項目に従うと、修正プログラムによって元のインストール ソースへのアクセスが必要になる可能性を最小限に押さえられます。

  • ファイル全体修正プログラムのみを使用します。 これにより、以前にリリースされたすべてのバージョンのファイルに対してバイナリ修正プログラムを作成する必要がなくなります。 一般に、ファイル全体修正プログラムのサイズはバイナリ修正プログラムよりも大きいことに注意してください。 修正プログラム作成プロパティ (PCP) ファイルで値が 1 の IncludeWholeFilesOnly プロパティを作成して、修正プログラムがファイル全体修正プログラムになるように簡単に設定できます。
  • すべてのカスタム アクションが元のソースの場所にアクセスしないようにします。
  • ResolveSource アクションに条件を付けて必要時のみ実行するか、このアクションがまったく存在しないようにします。
  • バージョン管理されていないすべてのファイルに対して MsiFileHash テーブルを設定します。 Windows インストーラー SDK ツール Msifiler.exe を使用すると、これが簡単に自動的に行われます。
  • すべてのファイルのバージョンと言語情報が正しいことを確認します。 Windows インストーラー SDK ツール Msifiler.exe を使用すると、これが簡単に自動的に行われます。

修正プログラム適用時のソース要件

次のケースでは、修正プログラムを適用するために元のインストール ソースへのアクセスが必要になる場合があります。

  • 修正プログラムの適用対象の機能が、現在ソースから実行されています。 このケースでは、機能が、ソースから実行される状態からローカル状態に移行されます。

  • 修正プログラムの適用対象のコンポーネントで、ファイルが欠落しているか破損しています。

  • 修正プログラムの適用対象のファイルがあるコンポーネント内に、MsiFileHash エントリなしのバージョン管理されていないファイルも含まれます。 バージョン管理されていないファイルをソースの場所から不必要に再コピーすることを防ぐには、設定済みの MsiFileHash テーブルが必要です。

  • 修正プログラムの適用に REINSTALLMODE の amus または emus が使用されました。 このオプションは、ファイルのバージョンに関係なくファイル コピー操作を実行するという点で危険です。 これにより、ファイルのバージョンが古くなる可能性があり、ほぼ常にソースが必要になります。 推奨される REINSTALLMODE 値は omus です。

  • 製品のキャッシュされたパッケージがありません。 修正プログラムの適用には、キャッシュされたパッケージが必要です。 キャッシュされたパッケージは、%windir%\Installer フォルダーに格納されます。

  • パッケージが ResolveSource アクションを呼び出すために作成されます。 このアクションは、通常は回避するか適切に条件付けする必要があります。実行すると常にソースへのアクセスが行われるためです。

  • パッケージのカスタム アクションが、何らかの方法でソースへのアクセスを試行します。 最も一般的な例は、種類 23 の同時実行インストール カスタム アクションです。

    Note

    同時実行インストールは、一般へのリリースを目的としたアプリケーションのインストールには推奨されません。 同時実行インストールの詳細については、「同時実行インストール」を参照してください。

     

  • 修正プログラムパッケージが構成されるバイナリ修正プログラムが、コンピューター上のファイルの現在のバージョンに適用されません。

修正プログラムの適用時に Windows インストーラーが元のソースにアクセスする必要がある次の例について考えてみましょう。

  1. 製品 Example の RTM バージョンをインストールします。
  2. 修正プログラム Qfe1.msp をコンピューターに適用します。 この修正プログラムにより、Example.dll バージョン 1.0 がバージョン 1.1 になります。
  3. 新しい修正プログラム Qfe2.msp が提供されます。これにより、Example.dll がバージョン 1.2 に更新され、Qfe1.msp が廃止されます。 ただし、この修正プログラムはバージョン 1.0 の Example.dll のみをターゲットにするように成されました。製品の RTM バージョンを使用して生成されたためです。 Example.dll バージョン 1.2 には、Example.dll バージョン 1.1 に含まれる修正プログラムが組み込まれていますが、この .msp ファイルは RTM イメージと QFE2 イメージの間で生成されました。 そのため、Qfe2.msp がコンピューターに適用されるとき、Windows インストーラーは元のソースにアクセスする必要があります。 Example.dll 用のバイナリ修正プログラムは、バージョン 1.1 に適用することはできず、バージョン 1.0 のみに適用できます。 このため、インストーラーがバージョン 1.0 の Example.dll を元のソースの場所から再コピーすることになり、それによって修正プログラムを正常に適用できます。

修正プログラム削除時のソース要件

Windows インストーラーによって修正プログラムのベースライン情報が格納されていない場合、修正プログラムを削除するために元のインストール ソースへのアクセスが必要になる可能性があります。 Windows インストーラー 3.0 以降では、インストーラーによって、ファイルの更新時にファイルに関するベースライン情報が選択的に保存されます。 ベースライン キャッシュの詳細については、「修正プログラム サイズの縮小」を参照してください。