パッチをファイルの選択した領域に適用
可変コンテンツを持つファイルにパッチを適用するときは、重要な情報が失われるのを防ぐために、ターゲット ファイルの選択された領域を保持する必要がある場合があります。 たとえば、一部のアプリケーションでは、ユーザー情報を実行可能ファイルにスタンプします。 ターゲット ファイルの内容は、アプリケーションがインストールされているコンピューターによって異なる可能性があるため、特定のファイルがパッチの有効なターゲットであるかどうかを判断することが困難になります。 ターゲット ファイルに書き込まれたユーザー情報を、パッチによって上書きすることもできます。
Msimsp.exe および PATCHWIZ.DLL を使用してパッチ作成プロパティ (PCP) ファイルを生成するとき、ターゲット ファイルの特定の領域の情報をパッチ適用時に無視するように指定できます。 また、ターゲット ファイルの他の領域の情報を保持し、更新されるファイル内のオフセット位置にコピーするように指定することもできます。 TargetFiles OptionalData テーブル、ExternalFiles テーブル、FamilyFileRanges テーブルを作成するときに、ターゲット ファイルの無視する領域と保持する領域を指定します。
TargetFiles OptionalData テーブルの RetainOffsets 列と FamilyFileRanges テーブルの RetainOffsets 列と RetainLengths 列を使用して、ターゲット ファイルから更新されるファイル内のオフセット範囲に情報の範囲をコピーします。 この範囲の情報は保持されます。 FamilyFileRanges テーブルの RetainLengths 列を使用して、範囲の長さを指定します。 保持される範囲の長さは、ターゲット ファイルと更新されるファイルで同じです。 TargetFiles OptionalData テーブルの RetainOffsets 列を使用して、ターゲット ファイル内の範囲のオフセットを指定します。 FamilyFileRanges テーブルの RetainOffsets 列を使用して、更新されるファイル内の範囲のオフセットを指定します。 したがって、保持されるターゲット ファイルの範囲は、TargetFiles OptionalData テーブルの RetainOffsets に RetainLengths を足した値です。 この情報は、FamilyFileRanges テーブルの RetainOffsets に RetainLengths を足した値によって指定された範囲内の更新ファイルにコピーされます。 複数の範囲を指定できますが、長さの順序はオフセットの順序と一致する必要があります。
TargetFiles OptionalData テーブルを使用してターゲット ファイルの範囲を無視します。 ターゲット ファイルのこの範囲の情報は、パッチによって引き続き上書きできます。 IgnoreOffsets 列の範囲のオフセットと、その長さを IgnoreLengths 列に指定します。 複数の範囲を指定できますが、長さの順序はオフセットの順序と一致する必要があります。
長さ列とオフセット列の値は、10 進数または 16 進数にすることができます。 PATCHWIZ.DLL が値を 16 進数として扱うのは、値の前に "0x" が付いている場合です。 これらの列は文字列列であり、PATCHWIZ.DLL は値を ULONG に変換します。 length 列は、長さをバイト単位で指定します。