# Patchsystem



## mmz (16. Sep 2009)

Hallo zusammen,

ich beschäftige mich zur Zeit mit verschiedenen Updatemöglichkeiten für meine Programme. Zum Hintergrund, ich habe bereits ein Updatesystem entwickelt, welches auch alle meine Anforderungen erfüllt. Dieses ist allerdings für die endgültige Verteilung an den Benutzer entwickelt worden. Heißt, ich kompilere die neuen Jar(s), packe evtl. neue libs dazu und starte mein Updatemechanismus. Wunderbar. Heißt aber auch, es werden immer alle veränderten und neuen Dateien komplett über das Netz geschickt.

Nun gibt es aber auch verschiedene Tester bzw. Anwender, die Fehler finden sollen oder Verbesserungsvorschläge machen. Diese sollen sich wenn möglich nicht immer das komplette Update holen, sondern nur die Änderungen. Daraufhin habe ich mir verschiedene Patch Generatoren angeschaut, welche auch eigentlich ihren Dienst klasse tun.
Kommen wir zu meiner Frage/Problem/Disskussion 

Ich habe z.B. eine ältere JAR Datei die aktualisiert werden soll. Nun ändere ich den src an einer Stelle und kompiliere neu, erstelle eine neue JAR und lass den Patch Generator drauf los. Problem an der Sache jedes Byte der JAR wurde geändert und somit kann ich auch gleich die ganze JAR Datei verschicken/anbieten. Selbes passiert auch bei C++ Programmen. Neu kompiliert, alle Bytes anders.

Nutze ich z.B. OllyDbg um eine Datei zu patchen funktioniert das Ganze natürlich wunderbar. Größe der Datei bleibt gleich, es werden nur die bytes geändert die auch wirklich verändert wurden usw...

Meine Frage, größere Programme wird kein Mensch im Debugger in Assembler umschreiben/verändern  Wie wird so ein Patch ( nur Änderungen übernehmen ) sonst erstellt, wenn das neue Kompilat doch ganz anders ist? Wie würdet Ihr das machen oder was wird bei euch für ein Patcher ( egal ob für Java oder C/C++ ) eingesetzt um so wenig wie möglich über das Netz schicken zu müssen?

Mfg


----------



## schalentier (16. Sep 2009)

Wie waere es, nur die geaenderten Dateien zu packen und dieses als Update-JAR zu verteilen? Das koennte man dann entweder ganz normal ueber den Classpath laden (Start-Skript muss aktualisiert werden) oder mit einem eignen Classloader irgendwie... Alternativ das Update-JAR "umpacken" und den Inhalt zum normalen JAR hinzufuegen (ueberschreiben).

Aber eine Frage sei erlaubt: Wozu? Schonmal nach Webstart gegoogelt?


----------



## Guybrush Threepwood (16. Sep 2009)

Ich weiß nicht ob Dir das hilft (weil plattformspezifisch): NSIS hat Plugins dabei, die so etwas machen können: VPatch plug-in - NSIS
Ansonsten empfiehlt es sich, den Code auf viele Jars aufzuteilen, sodass immer nur selektiv kleine Dateien übertragen werden müssen.


----------



## ice-breaker (16. Sep 2009)

Java Webstart ?


----------



## maki (16. Sep 2009)

> Wie würdet Ihr das machen oder was wird bei euch für ein Patcher ( egal ob für Java oder C/C++ ) eingesetzt um so wenig wie möglich über das Netz schicken zu müssen?


Ehrlich gesagt ist mir egal wieviel ich übes Netz schicke, Java WebStart erspart einem da viel Arbeit, für den Preis dass eben mehr Daten durchs Netz gehen.


----------



## byte (16. Sep 2009)

Pass doch einfach das Build Management so an, dass nicht wenige große Jars generiert werden sondern viele kleine.


----------



## Sanix (19. Sep 2009)

Eine Frage zu Webstart, wird bei jedem Start die derzeit installierte Version komplett upgedated, auch wenn sie aktuell ist?


----------



## Wildcard (19. Sep 2009)

Nein, nur wenn die Version auf dem Server aktueller ist. Ausserdem lassen sich über Webstart auch partielle Updates realisieren. Also: deine Anwendung besteht aus 7 jars, aber nur eins hat sich geändert, dann wird auch diese eine Jar neu runtergeladen.


----------



## mmz (23. Sep 2009)

Hallo zusammen,

hat leider ein wenig gedauert ( Viel zu tun ).
Also, klar kenn ich Webstart. Allerdings war das damals irgendwie kein Thema. Weiß nimmer genau warum. Außerdem war es ganz interessant mal selber so ein Updatesystem zu schreiben. Viel gelernt und wenn es am Ende dann auch noch so funktioniert wie es soll, um so besser .

Vielen Dank für den Hinweis mit NSIS VPatch. Das hatte ich auch gefunden, allerdings nie zum laufen bekommen. Patch erstellt, wunderbar ( schön klein ), aber bei dem Starten der erstellten Exe mit dem Fehler beendet, dass die Sourcedatei nicht geöffnet werden kann oder so ähnlich.

@Schalentier
Da ich ja schon ein funktionierendes Updatesystem habe, wäre es mir jetzt leider doch zu viel Aufwand an diesem noch einmal Änderungen vorzunehmen. Die eigentlichen Updates kommen ja nicht oft vor, da ist es mir auch egal wie viel ich da über das Netz schicke.  Mir ging es eher um die vielen kleinen Änderungen die bei den Testern eingespielt werden müssen.

Da ich gerade eh ein wenig am Umbauen des Sources bin denke ich ist es wirklich am besten das ganze Programm in viele kleine jars nach den Modulen aufzuteilen.

Danke für eure Antworten


----------

