修補檔案的選取區域
修補具有可變內容的檔案時,可能需要保留目標檔案的選取區域,以避免遺失重要資訊。 例如,某些應用程式會將使用者資訊戳記到可執行檔中。 由於目標檔案的內容可能取決於安裝應用程式的電腦,因此很難判斷特定檔案是否為修補程式的有效目標。 在目標檔案中寫入的使用者資訊也可以由修補程式覆寫。
當您使用 Msimsp.exe 和 PATCHWIZ.DLL (PCP) 檔案產生修補程式建立屬性時,您可以指定修補期間忽略目標檔案特定區域中的資訊。 您也可以指定目標檔案的其他區域中的資訊會保留並複製到更新檔案中的位移位置。 您可以指定要忽略的目標檔案區域,以及撰寫 TargetFiles OptionalData、 ExternalFiles和 FamilyFileRanges 資料表時要保留的區域。
使用 TargetFiles OptionalData 資料表的 RetainOffsets 資料行和 FamilyFileRanges 資料表的 RetainOffsets 和 RetainLengths 資料行,將目標檔案中的資訊範圍複製到更新檔案中的位移範圍。 此範圍中的資訊會保留。 使用 FamilyFileRanges 資料表的 RetainLengths 資料行來指定範圍的長度。 在目標和更新的檔案中,保留範圍的長度相同。 使用 TargetFiles OptionalData 資料表的 RetainOffsets 資料行,指定目標檔案中範圍的位移。 使用 FamilyFileRanges 資料表的 RetainOffsets 資料行,指定更新檔案中範圍的位移。 因此,保留的目標檔案範圍是 TargetFiles OptionalData 資料表和 RetainLengths 中的 RetainOffsets 值。 這項資訊會複製到 FamilyFileRanges 資料表中 RetainOffsets 的值加上 RetainLengths 所指定範圍內的更新檔案。 您可以指定多個範圍,但長度的順序必須符合位移的順序。
使用 TargetFiles OptionalData 資料表忽略目標檔案的範圍。 修補程式仍可覆寫此範圍目標檔案中的資訊。 在 IgnoreOffsets 資料行中指定範圍的位移,並在 IgnoreLengths 資料行中指定其長度。 您可以指定多個範圍,但長度的順序必須符合位移的順序。
長度和位移資料行中的值可以是十進位或十六進位。 如果 值前面加上 「0x」,PATCHWIZ.DLL會將值視為十六進位。 資料行是字串資料行,因此PATCHWIZ.DLL會將值轉換成 ULONG。 length 資料行會指定以位元組為單位的長度。