App updaten und neustarten

Status
Nicht offen für weitere Antworten.
T

terryl

Gast
Wie kann ich meine laufende Java-Anwendung updaten und dann autmatisch neu starten? Hilfreich wäre ein Skript, da ich in dem Bereich keine Erfahrung habe.
 
T

terryl

Gast
Geht nicht, die Anwendung soll Standalone auf einem Server laufen.
 
T

terryl

Gast
Auf dem Server steht kein Webbrowser zur Verfügung. Das Update liegt mit anderen Updates in einem Ordner des Startordners der Anwendung. Die Anwendung prüft anhand der Versionseinträge einer Textdatei, die vom Admin hochgeladen wird, ob eine neue Version zur Verfügung steht. Dann soll das Programm sich optisch beenden, updaten (also die neue Version aus dem Unterordner in den Startordner kopieren oder so) und dann neu starten (die neue Version hat den gleichen EXE-Namen).
 
T

terryl

Gast
@Ebenius: Mir ist nicht klar, wieso das wichtig ist. Nenne es einfach App.exe.
 

@x.l

Bekanntes Mitglied
Wenn es kein Problem ist, dass die Anwendung für einen Moment zweimal läuft, könntes du die EXE mit Runtime#exec starten und dann die erste Instanz beenden.

#edit: Oder verwende den ProcessBuilder.
 
T

terryl

Gast
Mit dem ProcessBuilder, der sich viel versprechend anhört, habe ich keine Erfahrungen. WIe muss ich dabei vorgehen?

Kann es damit so gehen:
- Process1 läuft (die zu aktualisierende Version)
- Process 1 wird optisch versteckt.
- Process 2 wird gestartet, dabei wird das Programm unter einem Hilfsnamen aus dem Unter- in den Startordner kopiert.
- Process 2 wird sichtbar gemacht.
- Process 1 wird beendet und die Exe-Datei zu Process 1 gelöscht.
- Die Exe-Datei zu Process 2 wird umbenannt in den eigentlichen Namen.
[/list]
 

@x.l

Bekanntes Mitglied
Hm... weiß ja nicht wie genau deine Struktur ist. Aber im Prinzip könnte doch Prozess1 alle relevanten Dateien updaten. Erst dann wird die aktualisierte Version gestartet. Wenn die läuft killst du Prozess1.

Oder du schreibst noch ein kleines Update-Tool. Ablauf:
- Prozess1 prüft auf Updates
- Update verfügbar --> UpdateTool starten
- Prozess1 beenden
- UpdateTool führt Dateiupdate durch
- UpdateTool startet aktualisierte Version
- UpdateTool beenden
- Aktuelle Version läuft
 
T

terryl

Gast
@@x.l: Bin erst jetzt dazu gekommen, mich weiter mit dem Thema zu beschäftigen.

Mich plagt noch das Problem der Processbeendigung. Ich habe zwar Process.destroy() gefunden, habe aber Zweifel, dass dies in meinem Fall funktioniert:

(1) Woher erfahre ich den Namen meines eigenen Hauptprozesses (also das aktuell laufende Programm). Hier habe ich doch nur eine main und den Klassennamen, z. B. MyClass, keinen separat gestarteten Process. Müsste ich MyClass.destroy() schreiben?

Meine main sieht so aus:
Code:
	public static void main( final String[] args )
	{
		if( 0 == args.length )
		{
			SwingUtilities.invokeLater( new Runnable()
				public void run()
				{
					new MyClass( args );
				} );
		}
		else
		{
			// ...
		}
	}

(2) destroy() zerstört einen Subprozess? Woher nehmen und nicht stehlen?

(3) Geht destroy() unabhängig vom Betriebssystem oder muss ich da spezielle Anpassungen machen?
 

Wolfgang Lenhard

Bekanntes Mitglied
Ich habe mal ein bisschen was hierfür programmiert: http://www.java-forum.org/de/topic76692_updatemanager.html
Das müsste allerdings noch erweitert werden, indem das Installationsprogramm, das die App aktualisiert direkt vom Java-Programm aus geladen und gestartet wird. Das Programm muss sich dann selbst beenden und zum Neustart kann am Ende des Installationsprozesses das Programm wieder gestartet werden, wie das bei den Installern so üblicherweise der Fall ist.
 
T

terryl

Gast
Danke Wolfgang Lenhard, aber mein Kernproblem bleibt leider bestehen: Wie beende ich den laufenden Prozess? Wenn ich einen neuen Prozess mit ProcessBuilder anlege und starte, dann im aufrufenden Code System.exit(0) angeben, wird die VM beendet, auch der neu gestartete Prozess. Das einzige, was ich gefunden habe, ist, betriebssystemabhängig den Prozess zu töten (was bei mehreren System schon schwierig wird).

In C-Programmen unter Windows oder Linux wird dies ja mit eigenen Routinen erledigt, bezogen auf das System. Geht das wirklich nicht in Java plattformunabhängig?
 
G

Gast

Gast
Evtl. etwas zu trivial und auch ziemlich ohne Nachdenken, aber wäre es nicht sinnvoll, wenn du dein Programm in einem Wrapper laufen lässt? Der kann dann die Instanzen killen, Update fahren und das neue Programm starten. Da ja noch immer ein Programm (der Wrapper) läuft, kommst du auch nicht mit System.exit in Problemen.
 
G

Gast

Gast
Boah ich brauch mal n account :D
...neue Programm starten kann.
Etwas schwammig: Du brauchst dann System.exit nicht verwenden.
 

Wolfgang Lenhard

Bekanntes Mitglied
Und wie wäre es mit:

Code:
try {
      String exeFile = "irgendEinFile.exe";
      Desktop dt = Desktop.getDesktop();
      dt.open(new File(exeFile));
      System.exit(0);
    }
    catch (Exception err) {
      err.printStackTrace();
    }

Das klappt bei mir tadellos und die Java-App wird beendet ohne die externe exe zu stoppen. Geht natürlich erst ab Java 1.6.

Ciao,
Wolfgang

P.S.: Getestet unter Vista.
 
T

terryl

Gast
@Wolfgang Lenhard: Leider nur etwas für Java 6. >>doppelseufz<<

@Gast: Wie sieht so ein Wrapper aus? Ich habe bisher nur mit Datentyp-Wrappern gearbeitet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
TheDarkRose Maven Wie in Eclipse die Versionsnummern updaten? Allgemeine Java-Themen 24
D Updaten von Klassen durch jar.exe zerstört diese. Update durch WinRAR gelingt! Allgemeine Java-Themen 2
H Unidokumente updaten Allgemeine Java-Themen 3
O JFreeChart: ständiges Updaten der Chart stoppen Allgemeine Java-Themen 4
X JDK updaten - wie am besten vorgehen? Allgemeine Java-Themen 5
G Programm/Jar updaten Allgemeine Java-Themen 3
H Java-Klassen in JAR updaten - Zugriff auf JAR von Java aus Allgemeine Java-Themen 7
S JTable erzeugen und updaten Allgemeine Java-Themen 10
M dateien in einer zip datei hinzufügen - Archiv updaten Allgemeine Java-Themen 11
T jar - Archiv updaten Allgemeine Java-Themen 2
J java updaten? Allgemeine Java-Themen 8
W Jar datei updaten mit java Allgemeine Java-Themen 4
N Neustarten des Codes nach der Fehlermeldung Allgemeine Java-Themen 17
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
K Batches überwachen und ggf. neustarten Allgemeine Java-Themen 5
P Thread starten / stoppen / neustarten Allgemeine Java-Themen 8
E Applet neustarten Allgemeine Java-Themen 2
V Java-Programm richtig neustarten? Allgemeine Java-Themen 9
G Prozesse überwachen und neustarten Allgemeine Java-Themen 3
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
V Thread schlafen lassen oder neustarten? Allgemeine Java-Themen 9
T Herunterfahren oder Neustarten der verschiedenen OS Allgemeine Java-Themen 11
I Thread neustarten Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben