Patchen ausgewählter Regionen einer Datei
Beim Patchen von Dateien mit variablen Inhalten ist es möglicherweise erforderlich, ausgewählte Regionen der Zieldatei beizubehalten, um den Verlust wichtiger Daten zu verhindern. Beispielsweise legen manche Anwendungen Benutzerdaten in der ausführbaren Datei ab. Da die Inhalte der Zieldatei möglicherweise von dem Computer abhängen, auf dem die Anwendung installiert ist, lässt sich nur schwer ermitteln, ob eine bestimmte Datei ein gültiges Ziel für den Patch ist. In der Zieldatei gespeicherte Benutzerdaten können auch von einem Patch überschrieben werden.
Wenn Sie mit Msimsp.exe and Patchwiz.dll eine Patch Creation Properties (PCP)-Datei erstellen, können Sie festlegen, dass Daten in bestimmten Regionen der Zieldatei beim Patchen ignoriert werden. Außerdem können Sie festlegen, dass Daten in anderen Regionen der Zieldatei beibehalten und an einen Offsetspeicherort in der aktualisierten Datei kopiert werden. Sie können angeben, welche Regionen der Zieldatei ignoriert und welche beibehalten werden sollen, wenn die Tabellen TargetFiles OptionalData, ExternalFiles und FamilyFileRanges erstellt werden.
Verwenden Sie die Spalte „RetainOffsets“ der Tabelle TargetFiles OptionalData und die Spalten „RetainOffsets“ und „RetainLengths“ der Tabelle FamilyFileRanges, um einen Datenbereich aus der Zieldatei in einen Offsetbereich in der aktualisierten Datei zu kopieren. Die Daten in diesem Bereich werden beibehalten. Geben Sie mit den Spalten „RetainLengths“ der Tabelle „FamilyFileRanges“ die Länge des Bereichs an. Die Länge des beibehaltenen Bereichs ist in der Zieldatei und in der aktualisierten Datei gleich. Geben Sie mit der Spalte „RetainOffsets“ der Tabelle „TargetFiles OptionalData“ den Offset des Bereichs in der Zieldatei an. Geben Sie mit der Spalte „RetainOffsets“ der Tabelle „FamilyFileRanges“ den Offset des Bereichs in der aktualisierten Datei an. Der beibehaltene Bereich der Zieldatei entspricht daher dem Wert von „RetainOffsets“ in der Tabelle „TargetFiles OptionalData“ plus „RetainLengths“. Diese Daten werden in dem Bereich, der durch den Wert von „RetainOffsets“ in den „FamilyFileRanges“-Tabellen und „RetainLengths“ vorgegeben wird, in die aktualisierte Datei kopiert. Sie können mehrere Bereiche festlegen, aber die Reihenfolge der Längen muss mit der Reihenfolge der Offsets übereinstimmen.
Verwenden Sie die Tabelle TargetFiles OptionalData, um einen Bereich der Zieldatei zu ignorieren. Daten in diesem Bereich der Zieldatei können weiterhin vom Patch überschrieben werden. Geben Sie den Offset des Bereichs in der Spalte „IgnoreOffsets“ und seine Länge in der Spalte „IgnoreLengths“ an. Sie können mehrere Bereiche festlegen, aber die Reihenfolge der Längen muss mit der Reihenfolge der Offsets übereinstimmen.
Die Werte in den Spalten für die Längen und Offsets können dezimal oder hexadezimal sein. Patchwiz.dll behandelt den Wert als hexadezimal, wenn er das Präfix „0x“ aufweist. Die Spalten sind Zeichenfolgenspalten. Daher wandelt Patchwiz.dll die Werte in ULongs um. Die Spalte „Length“ gibt die Länge in Bytes an.