# Update-Mechanismus ohne Webstart



## P4G0 (17. Okt 2009)

Hi Folks,

ich möchte gerne für eine Applikation einen Update-Mechanismus ohne Webstart implementieren. Das ganze soll so aussehen, dass bei Programmstart bei einem verfügbaren Update ein Fenster geöffnet werden soll, bei dem der Anwender Update anwenden oder Abbrechen klicken kann.

Bei "Update anwenden" soll die derzeitige .jar-Datei durch die neue ausgetauscht werden, nur wie implementiert man das am besten? 

Über eine zweite jar-Datei, die in etwa wie folgt vorgeht?
- Hauptprogramm beenden
- Update herunterladen und ggf. validieren
- jar-Datei des Hauptprogrammes löschen
- neue jar-Datei umbenennen
- neue Version starten

Gibt es dazu eine Art Best-Practise? Und wie startet man am Besten aus einem laufenden Java-Programm eine andere jar-Datei?


----------



## FArt (19. Okt 2009)

P4G0 hat gesagt.:


> Gibt es dazu eine Art Best-Practise?


Nein.



P4G0 hat gesagt.:


> Und wie startet man am Besten aus einem laufenden Java-Programm eine andere jar-Datei?


Am besten die Applikation als Prozess forken.

Ich habe das schon mal gemacht, für Client-Server Installationen mit Backup und Recovery. Ist eigentlich straight forward, vorwiegend Kopierarbeit. Die Komplexität kommt dann mit der Optimierung, z.B. bei kumulativen Updates, vor allem in der Verwaltung der Pakete!


----------



## Gast2 (19. Okt 2009)

Moin,

gemacht hatte ich so was mal in .NET ... da hatte ich einen Server der für jedes File ein MD5 berechnet hat ... das wurde an den Client gesendet der selbiges mit seinen Daten machte ... war die MD5 falsch -> Datentausch

das eigentliche Programm hatte ich in eine DLL ausgelagert und nach dem Datenabgleich habe ich die DLL nachgeladen und das eigentliche Programm gestartet ... unter Java müsste es mit UrlClassloader funktionieren

hand, mogel


----------



## Guybrush Threepwood (19. Okt 2009)

Ich glaube, das wird recht schwierig, wenn es plattformübergreifend funktionieren soll. Spätestens seit Vista kann auf Windows-Plattformen ein Programm nur noch dann ins Programm-Verzeichnis schreiben, wenn es mit Administratorrechten läuft. Es wird also nicht ganz einfach, das überall zum Laufen zu bringen.
Ich mache das mit externen Installern, die ich mit einer modifizierten Version von Java Tips - How to create a download manager in Java downloade. Vorher wird über eine externe Datei auf dem Webserver geprüft, ob eine neuere Version vorliegt als die aktuell installierte. Nach dem Download wird die Datei gestartet und das Programm beendet.


----------



## Wildcard (19. Okt 2009)

Man kann auch Eclipse Equinox verwenden, das bringt einen Update Manager mit den man programmatisch ansprechen kann. Das setzt allerdings vorraus das man die Sache Eclipse gerecht verpackt (Features + OSGi Bundles).
Für nicht Windows Systeme kann man auch die entsprechenden Pakete für den Paketmanager bauen, die sind dann auch updatefähig (.deb, .rpm,...)


----------



## P4G0 (19. Okt 2009)

Hmm... wie mach ich das denn nun am besten...?

Hat denn jemand für Webstart nen gutes Tutorial parat, vllt nutze ich das doch. Wie läuft Webstart denn vom Prinzip her ab? Es wird nicht bei jedem Programmstart das Programm aus dem Netz geladen, oder?


----------



## Wildcard (20. Okt 2009)

Nein, du baust nur eine JNLP die alle deine Resourcen auflistet und Webstart schaut beim Start nach ob eine dieser Resourcen zwischenzeitlich aktualisiert wurde. Wenn das der Fall ist wird die aktualisierte Resource geladen.
Für den Benutzer ist es kaum von einer normalen Desktopapplikation zu unterscheiden, du kannst sogar automatisch Startmenü und Desktop Verknüpfungen erzeugen lassen und die Applikation funktioniert ohne Internetverbindung (dann natürlich ohne vorherigen Updatecheck)


----------



## P4G0 (21. Nov 2009)

Also ich habe mich zwischenzeitlich mit WebStart befasst und gelesen, dass WebStart keine Schreibzugriffe auf die Festplatte zulässt - wie bei Applets eben. Dadurch kommt diese Methode nicht in Frage, da ich Zugriff auf die Festplatte benötige.

Hmm mal abgesehen davon, dass ab Vista nur noch das Schreiben im Programm-Verzeichnis mit Admin-Rechten möglich ist, könnte es wie folgt klappen?

- Beim Programmstart auf neue Version prüfen
- wenn Update vorhanden kleines Fenster anzeigen
- bei einem Klick auf "aktualisieren" wird eine neuere Version heruntergeladen
- diese starte ich, lasse das "alte Programm" schließen und dann löschen
- die neue Version wird dupliziert und umbenannt, sodass das jar-File wieder den richtigen Namen hat
- kopierte Version starten und dann temporäre Version schließen und löschen


----------



## Wildcard (21. Nov 2009)

P4G0 hat gesagt.:


> Also ich habe mich zwischenzeitlich mit WebStart befasst und gelesen, dass WebStart keine Schreibzugriffe auf die Festplatte zulässt - wie bei Applets eben. Dadurch kommt diese Methode nicht in Frage, da ich Zugriff auf die Festplatte benötige.


Wie bei Applets bekommst du Vollzugriff wenn du deine Anwendung signierst.


----------



## P4G0 (21. Nov 2009)

Ah ok, das wusste ich nicht


----------

