シンボルを使用したバイナリ パッチ サイズの縮小

ターゲットとアップグレードのイメージ バイナリにパブリック シンボルを使うと、バイナリ パッチのサイズを約半分に減らせます。 実際に減る量は、使われるシンボルによって異なります。 シンボルを使用すると、シンボル ファイルの処理に時間がかかるため、パッチの作成時間が長くなる可能性があることに注意してください。

シンボルを使ってバイナリ パッチのサイズを小さくするには、ターゲットとアップグレード両方のイメージ バイナリにシンボルを指定する必要があります。 TargetImages テーブルの SymbolPaths 列と UpgradedImages テーブルの SymbolPaths 列でシンボルを指定します。 プログラム データベース (PDB) ファイル形式でシンボルを生成するには、Visual C++ を使う必要があります。 Visual C++ の新しいバージョンでは、必要な情報はすべて PDB ファイルで提供されます。 以前のバージョンの Visual C++ では、デバッグ (DBG) ファイル形式も生成されます。 この場合、SymbolsPaths の値で、PDB と DBG 両方のファイルの場所を指定する必要があります。

たとえば、パッチの TargetImage は、Windows 2000 に付属し、MSI.DLL の 1.1.1029.0 バージョンをインストールするインストール パッケージであるとします。 UpgradedImage は、Windows 2000 Service Pack 1 (SP1) に付属し、MSI.DLL の 1.11.1314.0 バージョンをインストールする、更新されたインストール パッケージであるとします。 その場合、2 つのパッチ作成プロパティ (PCP) ファイルを作成する必要があります。1 つの TargetImages テーブルと UpgradedImages テーブルの SymbolPaths 列はどちらも NULL (空白) のままになっており、もう 1 つの TargetImages テーブルと UpgradedImages テーブルの SymbolPaths 列はどちらも、バイナリのシンボルの場所が設定されています。 この場合、シンボルを使わずに生成されたパッチのサイズは、シンボルを使って生成されたパッチのサイズの約 3 倍になります。

Mpatch.exe ユーティリティを使って、1 つのファイルでバイナリ パッチの生成をテストし、シンボルが有効かどうかを調べることができます。 Mpatch.exe ユーティリティは、Windows インストーラー開発者向け Windows SDK コンポーネントに含まれています。 Mpatch.exe の出力では、シンボルが一致しないかどうかが示されます。

たとえば、シンボルが有効かどうかを調べるには、次のコマンド ラインを入力します。

mpatch.exe -NEWSYMPATH:d:\update -OLDSYMPATH:d:\target d:\target\example.dll d:\update\example.dll example.pat

シンボルが正しい場所にない場合、Mpatch.exe の出力に次の警告が含まれる場合があります。

WARNING: no debug symbols for d:\update\example.dll