# Software update. Wie realisieren?



## Anselmus (18. Sep 2006)

ho folks,

ich suche eine möglichkeit, installierte software einem update zu unterziehen. also es wird geprüft, ob die installierte version die aktuelleste ist und, falls nicht, wird eine neuer von einem server heruntergeladen und installiert.

gibt es da prinzpielle vorgehensweisenbei updates?

ich hab mir das so ein bißchen wie bei mozilla/firefox vorgestellt. aber leider konnte ich im quellcode nix ausfindig machen. vielleicht kann mich jemand mal auf die entsprechende stelle hinweisen.

ich brauche hier keine lösung. ich möchte nur mal eine high-level-übersicht, wie man updates macht...

viele grüße
stephan


----------



## foobar (18. Sep 2006)

Da fällt mir erstmal nur JavaWebstart ein.


----------



## Tobias (18. Sep 2006)

@foobar: ?

@Anselmus: Deine Anwendung fragt einen voreingestellten Server "Gibt es eine neue Version?", der antwortet "ja" oder eben "nein". Bei "ja" holt deine Anwendung von einem voreingestellen / in der Antwort enthaltenen Pfad die neue Version und installiert sie - wie auch immer.
High Level genug?

mpG
Tobias


----------



## Wildcard (18. Sep 2006)

Da finde ich Webstart aber auch besser.


----------



## foobar (19. Sep 2006)

@Tobias http://java.sun.com/products/javawebstart/


----------



## Anselmus (19. Sep 2006)

JWS ist prima, aber leider halt blos für Java 

@tobias:

gibts so was wie update server? ich weiß das es bei InstallShield sowas gibt, aber der ist ziemlich teuer...


----------



## AlArenal (19. Sep 2006)

Ich brainstorme mal:

Du entwickelst ein Modul/eine Lib, welches zu einem Server Kontakt aufnimmt. Am besten macht man das über Port 80 (HTTP), weil da die Wahrscheinlichleit am gerinsgten ist, dass man durch eiine Firewall oder einen speziellen Proxy o.ä. geblockt wird. 
Neben selbst entwickelten Protokollen, kann man natürlich auch gleich über einen Webservice gehen (XML-RPC, SOAP).

Der Client fragt beim Server die aktuelle Version an. Ist sie unterschiedlich zur vorhandenen, holt der Client das Delta (die geänderten Dateien zwischen eigener Version und der aktuellen) vom Server runter und legt es in einem temporären Verzeichnis ab. Direkt überschreiben ist nicht, da die Dateien ja gerade in Verwendung sind.

Nun veranlasst die Lib den Neustart der Anwendung, merkt dass in dem temp. Verzeichnis neuer Krims ist und kopiert erstmal um. Tricky wirds mal für nen Augenblick, wenn das Ding sich selbst updaten muss.

Das Ganze kann man natürlich beliebig erweitern:
- Authentifizierung: Ist die Lizenz des Client gültig, darf er also updaten?
- Benutzung spezieller Update-Archive die jemand manuell runtergeladen hat, falls es über das Auto-Update nicht klappt.
- Überprüfung der Cheksummen der übermittelten Dateien
- ...


----------



## Tobias (19. Sep 2006)

@foobar: WebStart ist mir durchaus ein Begriff, aber ich habe einfach mal vermutet, dass Anselmus' Anwendung nicht permanent mit dem Netz verbunden sein will, sondern größtenteils offline läuft. Wie ein Virenscanner zum Beispiel, der sich ja auch ganz ohne Internet starten läßt und nur bei Gelegenheit seinen Server anruft, ob es ne neue Definitionsdatei gibt.
Daher die Frage, wie WebStart da rein passt? Ich hab noch nix mit WebStart gemacht, wenn das Ding also "magische" Fähigkeiten hat, will ich darüber gerne aufgeklärt werden...

@Anselmus: Ich habe keine Ahnung, ob es sowas vorgefertigt gibt. Wenn ist es aber wahrscheinlich teuer (oder OpenSource ). Das für eine spezifische Anwendung selbst zu bauen dürfte aber nicht weiter schwierig sein, PHP kann SOAP, Java (und praktisch alle anderen wichtigen Sprachen) auch.

mpG
Tobias


----------



## AlArenal (19. Sep 2006)

Webstart-Anwendungen lassen sich auch "offline" starten.


----------



## Wildcard (19. Sep 2006)

Oder auch mal den Code des Eclipse Update Managers zu Inspirationszwecken anschauen...


----------



## fnassaj (18. Mrz 2007)

Hallo,

ich möchte eine Update Mechanism in meiner Applikation implementieren und habe deinen Eintrag gelesen. Kannst du mir einige Details erwähnen oder sagen, wo und was ich lesen muss? meine IDE ist JDeveloper. Möchte keine Java Web Start benuzten.

Grüße




			
				Anselmus hat gesagt.:
			
		

> ho folks,
> 
> ich suche eine möglichkeit, installierte software einem update zu unterziehen. also es wird geprüft, ob die installierte version die aktuelleste ist und, falls nicht, wird eine neuer von einem server heruntergeladen und installiert.
> 
> ...


----------



## Anselmus (22. Mrz 2007)

hi,

da meine update-routine mehr als ein programm updaten musste habe ich das nicht aus einer anwendung heraus gemacht. ich habe eine kleine externe anwednung, die über registry-einträge (ist windows software) die installationsverzeichnisse und versionsnummern findet.

ich habe das ganze mit NSIS (http://nsis.sourceforge.net/Main_Page) gemacht, dass eigentlich zum  erstellen von installationsroutinen dient. das nsis skript läd im falle eines updates weitere nsis skripter herunter, die den eigentlichen update-vorgang durchnehmen.

falls du noch interesse hast, kannst mir auch ne pn schicken...

gtx
stephan


----------



## Anselmus (22. Mrz 2007)

Wildcard hat gesagt.:
			
		

> Oder auch mal den Code des Eclipse Update Managers zu Inspirationszwecken anschauen...




eclipse läd im falle eines updates immer das zu aktualisierende paket komplett runter. ich wollte aber nur die tatsächlichen neuerungen. jetzt muss ich natürlich dafür sorgen das nicht mehr genutzte teile gelöscht werden, was bei einem download des gesamten pakets entfällt.


----------

