Updater für eigenes Programm

Dark Ranger

Erfahrenes Mitglied
Hiho

Ich habe mir so überlegt, dass ich mir ein updater für ein eigenes Programm schreibe. Allerdings frage ich mich, wie ich es am besten anstelle, dass das Programm auch ersetzt wird.
Bei dem Programm handelt es sich um eine JAR Datei. Brauche ich nun noch eine zweite JAR Datei, sozusagen den Updater der die erste Datei ersetzt? Weil ich denke es ist nicht möglich, dass man die Jar ersetzen kann die gerade ausgeführt wird?

Habt ihr vielleicht einen anderen Vorschlag? Wie realisiere ich das ganze auf der anderen Seite? Weil das Programm soll nur von bestimmten Personen heruntergeladen werden können. Ein AuthBasic von Apache ausreichend?
 
Weil das Programm soll nur von bestimmten Personen heruntergeladen werden können. Ein AuthBasic von Apache ausreichend?
Nein, da du das Passwort ja irgendwo im Programm hinterlegen müsstest. Somit wäre es fast kein Problem von aussen auszulesen, dafür gibt es genügend Tools.
Ausser der Benutzer muss das Passwort kennen und manuell eingeben, was allerdings nicht gerade Bedienerfreundlich wäre.

Allgemein ist ein Update der eigenen JAR nicht möglich (solange du Plattformunabhängig bleiben willst; Unix kanns, Windows kann das nicht).

Eine Möglichkeit (wie du bereits erkannt hast) wäre eine eigenständige JAR, welche nur den Updater enthält und die neue Version runterlädt. Zur Authentifizierung fällt mir leider kein sicherer und für den Benutzer unsichtbarer Weg ein, sorry.

Hoffe du kannst mit meinen Vorschlägen und Denkanstößen was anfangen. ;)

Gruß
BK
 
Ok

Es ist eine Windows Anwendung -.- Mist! Alles in einer JAR zu haben wäre um einiges schöner.

Mit der Sicherheit muss ich mir dann wohl noch etwas überlegen. Im Grunde genommen ist es nur für 1 Person und ich muss die Download Seite irgendwie schützen, sodass andere das Programm nicht laden können (obwohl es nicht viel bringen würde, da es schon ziemlich speziel ist :D)
 
Wenn das Programm eh nur einer hernimmt, dann brauchst ja nur die URL niemanden geben, dann kanns auch niemand laden. Oder seh ich da was falsch? ;)

Den Updater kannst dir ja auch bei jedem Update zuerst vom Server holen, dann aufmachen und die Hauptanwendung schließen. Der Updater holt sich die neue Version und startet wieder die Hauptanwendung.
So oder so ähnlich macht es glaube ich auch der JDownloader...

Wenn die Hauptanwendung aufgeht, dann löscht du einfach deinen Updater wieder ;)
Somit hat der Benutzer nur eine JAR, nicht mehrere.

Gruß
BK
 
Joar mit dem URL nicht weitergeben ist natürlich schon klar, aber es könnte ja mal wer darüber stolpern.

Das mit dem Updater laden ist eine sehr gute Idee, ich denke so werde ich es umsetzen, danke
 
Nö,
dein Programm (jar) liegt im Cache auf deinem Rechner und wird von dort auch aus gestartet. Es schaut halt nur, ob neue Versionen online vorliegen und wenn ja, werden die runtergeladen und ersetzen die jar im Cache. Bei fehlender Verbindung wird einfach die Cache-Version gestartet.

Grüße,
Peter
 
Mhhh ok wäre auch eine Möglichkeit, aber ich bastele es erstmal so :D Habe schon lange nichts mehr mit JAVA gemacht und will mal wieder reinkommen
 
Huhu, du kannst es natürlich auch so machen wie ich es tue:

Ein externes Programm starten welches das update downloaded falls es eine neuere Version gibt.

Von dem zu updatenden Programm kannst du unter Windows folgenderweise den Updater starten und das zu updatende Programm schließen.
(Wenn nicht über die DLLs aufgerufen wird, dann läuft die JVM so lange weiter bis der Subprocess beendet ist - und blockt dabei immer noch die zu updatende JAR)

Java:
try{
	ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "rundll32","shell32.dll", "ShellExec_RunDLL", "Pfad_zur_app_hier");
	pb.start();
	System.exit(0);
	}
	catch(Exception ex){
	}

Der Updater lädt dann die neueste Version und ersetzt alle Files.

Wegen deinem gewünschten Zugriffsschutz:

Du kannst eine PHP datei schreiben die von außen zugänglich auf dem Webserver liegt. Wenn man die PHP website manuell oder durch ein Java Programm aufruft und den Parameter übergibt (das richtige Passwort) so wird die Datei returned.

Das directory in dem die File liegt ist auf chmod 700 gestellt und somit von außen nicht einsehbar (Error 403 - Zugriff verweigert).

Nur das PHP script hat Zugriff auf die Datei und gibt diese auch her wenn das Passwort stimmt. Ganz easy...

PHP:
<?php
if($_GET["password"]=="STRENGGEHEIMESPASSWORT:O"){
   $downloadfile = "/data/www/kunde334/web/deinedomain.at/data/bf2mm.jar";
   $filename = "bf2mm.jar";
   $filesize = filesize($downloadfile);

   header("Content-Type: application/force-download"); 
   header("Content-Disposition: attachment; filename=$filename"); 
   header("Content-Length: $filesize");
   $size = @readfile($downloadfile);
   return $size;
}
else{
echo("Error: Wrong Password");
}
?>

Wenn man jetzt also: wewewe.deinedomain.tld/data/bf2mm.jar aufruft, wird der Zugriff verweigert.

Ruft man jetzt das Script auf, welches überall liegen kann, bekommt man die Datei bei richtigem Passwort:

wewewe.deinedomain.tld/getJAR.php?password=STRENGGEHEIMESPASSWORT:O

Unter Windows könntest du auch ganz einfach den Updater vergessen, und statt diesem einen bereits geladenen .exe installer starten. Diese Kopiert dann alle Dateien und pfuscht in der Registry rum.

Das ganze ist aber etwas der Overkill wenn nur eine Person deine App ladet (laden wird)

Wie auch immer,...
Viel Spaß :D

Grüße,
Filip L.
 

Neue Beiträge

Zurück