2008-09-28 17 views
9

Eine Sache, über die ich mich immer gewundert habe, ist, wie Software-Patches funktionieren. Eine Menge Software scheint nur neue Versionen auf ihren Binaries zu veröffentlichen, die über ältere Versionen installiert werden müssen, aber einige Software (Betriebssysteme wie Windows insbesondere) scheinen in der Lage zu sein, sehr kleine Patches zu veröffentlichen, die Bugs korrigieren oder bestehende ergänzen Software.Wie korrigieren kleine Software-Patches große Software?

Meistens können die Patches, die ich sehe, nicht ganze Anwendungen oder sogar kleine Dateien ersetzen, die in Anwendungen verwendet werden. Für mich scheint es, als ob die eigentliche Binärdatei geändert wird.

Wie werden diese Arten von Patches tatsächlich implementiert? Könnte mich jemand auf Ressourcen hinweisen, die erklären, wie das funktioniert, oder ist es genauso einfach, kleine Komponenten wie verknüpfte Bibliotheken in einer Anwendung zu ersetzen?

Ich werde wahrscheinlich nie eine Bereitstellung auf diese Weise tun müssen, aber ich bin neugierig, wie es funktioniert. Wenn ich richtig verstanden habe, dass Patches wirklich nur Teile von Binärdateien verändern können, ist dies in .NET möglich? Wenn es ist, würde ich es gerne lernen, da dies der Rahmen ist, den ich am meisten kenne und ich würde gerne verstehen, wie es funktioniert.

Antwort

14

Dies wird in der Regel mit Hilfe von Binär-Diff-Algorithmen implementiert - diff die zuletzt veröffentlichte Version gegen den neuen Code. Wenn der Benutzer die neueste Version ausführt, müssen Sie nur das Diff anwenden. Funktioniert besonders gut gegen Software, da der kompilierte Code in den Versionen normalerweise sehr ähnlich ist. Natürlich, wenn der Benutzer nicht die neueste Version ausführt, müssen Sie das Ganze sowieso herunterladen.


Es gibt ein paar Implementierungen von allgemeinen binären diff Algorithmen: bsdiff und xdelta sind gute Open-Source-Implementierungen. Ich kann keine Implementierungen für .NET finden, aber da die betreffenden Algorithmen ziemlich plattformunabhängig sind, sollte es nicht schwierig sein, sie zu portieren, wenn Sie sich wie ein Projekt fühlen.

+0

Ich würde ersetzen "kann" sein, ist oder zumindest in der Regel ist. –

2

Wenn Sie über das Patchen von Windows-Anwendungen sprechen, dann sollten Sie sich MSP-Dateien ansehen. Diese ähneln einer .MSI, aber nur Patch und Anwendung.

Werfen Sie einen Blick auf Patching and Upgrading in den MSDN-Dokumenten.

Eine .MSP-Datei lädt aktualisierte Dateien in eine Anwendungsinstallation. Dies sind in der Regel aktualisierte DLLs und Ressourcendateien, könnten jedoch auch jede andere Datei enthalten.

Zusätzlich zum Patchen der installierten Anwendung werden auch die Reparaturdateien in C: \ WINDOWS \ Installer aktualisiert. Wenn der Benutzer dann "Hinzufügen"/"Entfernen" wählt, werden die aktualisierten Patch-Dateien ebenfalls verwendet.

Ich denke, dass die von John Millikin besprochene binäre diff-Methode in anderen Betriebssystemen verwendet werden muss. Obwohl Sie es in Windows arbeiten könnten, wäre es etwas fremd.

Verwandte Themen