Updateprozedur ü. Internet fürs eigene Programm?

Status
Nicht offen für weitere Antworten.

ROOTer

Mitglied
Hallo Community,

wenn ich in meinem Programm eine Updatefunktion integrieren möchte, welche
auf Knopfdruck gestartet werden kann, was wären gute Lösungsansätze?

Knopfdruck Update -> Verbinde mit FTP-Server -> prüfe ob neuere Version
existiert -> wenn ja, lade Dateien in das Programmverzeichnis und überschreibe
schon existente Dateien. Danach Verbindung zum FTP-Server trennen und
Neustart des Programmes einleiten.

Was sagt ihr dazu? Hat jemand bereits Erfahrung mit dieser Thematik und kennt
bessere Lösungswege oder gar existierende Klassen die man zur Hilfe ziehen kann?

Danke schonmal vorab.

Freue mich schon auf die Antworten.


Viele Grüße,
ROOTer
 

byte

Top Contributor
hm, interessantes thema. theorie: du könntest auf deinem webspace ne art txt-datei ablegen, die die aktuelle versionsnummer enthält. die liest du vom programm ein und vergleichst mit der versionsnummer des programms. dann ggf. das neue jar-file runterladen. und dann brauchst du wohl ein zweites programm, das das aktuelle programm schließt, das neue öffnet und dann die alte datei löscht (oder umbenennt).
 

Bleiglanz

Gesperrter Benutzer
byto hat gesagt.:
hm, interessantes thema. theorie: du könntest auf deinem webspace ne art txt-datei ablegen, die die aktuelle versionsnummer enthält. die liest du vom programm ein und vergleichst mit der versionsnummer des programms. dann ggf. das neue jar-file runterladen. und dann brauchst du wohl ein zweites programm, das das aktuelle programm schließt, das neue öffnet und dann die alte datei löscht (oder umbenennt).

ist doch genau was webstart macht? am server liegt ein jnlp file, und neue versionen werden automatisch geladen...
 

L-ectron-X

Gesperrter Benutzer
Ich hoffe EagleEye liest diesen Thread. Er hat in einigen seiner Programme eine Update-Funtion eingebaut, die auch recht gut funktioniert.
 

EagleEye

Bekanntes Mitglied
*g
Joa ich hab in meinen Progs eine drin. Bei mir läuft das alles mit einer Datenbank. Mein Programm verbindet sich zu ihr vergleicht die Buildnummer und handelt dann dem entsprechend, früher hatte es dem User nur den Link gesagt aber die neuen starten ein neues Programm welches dann die Dateien ruterläd.
Alternativ zur Datenbank kann man auch ne einfache Datei auf nen Webserver legen wo eine Buildnummer oder ähnliches drin steht die man dann vergleichen kann.
Wenn du etwas runterlädst mußt du bedenken das wenn du die Jar deines Programms überschreibst dein Programm fast wie abgestürtzt ist, soweit wie ich das gemerkt hab kannst du die aktuelle Methode beenden und danach ist es wie tot, weil er keine Methoden mehr findet. Deshalb hab ich das über nen externen Downloader gemacht.
 

ROOTer

Mitglied
wow, das ging ja schnell!

Was macht der externe Downloader und wie startest du diesen? Wird er automatisch aus dem Programm das geupdatet werden soll heraus gestartet?

Zur Buildnumber: Wie machst du das mit der Buildnumber? Legst du doch manuell fest, oder geht das automatisch und kann das Prog sehen welches neuer ist?

Und noch eine Frage zum Schluss: Die Dateien sind alle einzeln und nicht in einer .jar-Datei. Das soll auch vorerst so bleiben, möchte die Dateien einzeln updaten können wenn sich etwas geändert hat.

Danke.


Viele Grüße,
ROOTer
 

EagleEye

Bekanntes Mitglied
ich starte den so
Runtime.getRuntime().exec("java -jar EagleUpdater.jar -PARENTCLASS java -jar EagleProjektManager.jar -PARENTNAME " + quelle.getName() + " " + para);
wobei ich ihm die Sachen die er Runterladen soll als Parameter mitgebe, der läd dann diese Dateien runter und startet das alte Programm wieder.

Ich mach die Buildnummer von Hand und halt anhand der eigenen Nummer und der die er sich irgendwie von nem Server holt sieht er ja welche neuer ist.
 

ROOTer

Mitglied
Kann man den Updateprozess nicht als Thread laufen lassen, der die lokalen Dateien erst sichert und die neuen dann herunterläd und irgendwie das Programm updatet oder das GUI refresht? Denke wohl eher nicht, wobei ich es noch nicht ausprobiert habe. Werden denn die Applikationsdateien gelockt wenn die Applikation ausgeführt wird? Denn dann würde es ohne einen Neustart keinesfalls funktionieren.


@EagleEye: Wozu brauchst du dann die Datenbank im Web? :bae:


Gruß,
ROOTer
 

EagleEye

Bekanntes Mitglied
ne kannst du nicht die die VM nimmt die Dateien einmal und dann sieht es die im Normalfall nichtmehr an

ich brauch die DB weil ich nicht nur die Buildnummer abgleiche sondern auch den Downloadlink darüber mir hol sowie einige andere Infos und bei mehreren Programmen die das so machen is das um einiges besser als einzelne Dateien ;)

u19280.hs-harz.de/downloads/java/app/EagleUpdater.jar hier das is mein Prog
 

ROOTer

Mitglied
Okay, dann werde ich es wie folgt lösen:

Schritt 1)
Programm startet sich, zusätzlicher Thread wird erzeugt und prüft mittels einer SQL-Abfrage die (dann meine neue ;) Update-Datenbank ob neuere Versionen zur Verfügung stehen. Falls ja, dann öffnet sich ein POP-Up-Fenster und das eigentliche Programm wird gefreezed.

Schritt 2)
Pop-Up: Es sind neue Updates verfügbar, möchten Sie diese jetzt downloaden? (Dazu muss das Programm neu gestartet werden.
JA | NEIN

Schritt 3)
(falls JA angeklickt wurde)
Programm startet den Update-Wizard und schliesst sich danach selbst.

Schritt 4)
Update-Wizard connected per FTP auf den Server und läd alle Dateien des Updates herunter.
Beendet die Verbindung und startet das Programm welches jetzt geupdatet wurde, wieder.
Danach beendet sich das Prog selbst.

Fertig.



So sollte es problemlos funktionieren, oder findet jemand einen Denkfehler bzw. haeb ich was vergessen zu beachten?


Viele Grüße,
ROOTer
 

EagleEye

Bekanntes Mitglied
ne das sollte klappen
auch wenn ich das nicht über FTP machen würde sondern einfach sagen new URL("Pfad zur datei aufm Webserver").openConnection(); oder so ähnlich ist die Methode dann haste nen Inputstreams und kannst fröhlich drauflosziehen ;)
 
G

Guest

Gast
Hi,

ja, wenn ich es alles in eine .jar-Datei packen würde. Allerdings ist das Programm jetzt schon recht groß, und Grafiken müssen ja nicht übertragen werden etc.
Deswegen mache ich es so, das nur die Dateien an denen was geändert wurde, übertragen und somit geupdated werden.

So wird die Dauer des Updates minimalst gehalten! :)



Danke für die vielen Tipps,

Beste Grüße,
ROOTer
 

ROOTer

Mitglied
Hm, ok - war ja nur ein Beispiel.
Besser aber es werden nur die 3 Dateien geupdatet an denen was geändet wurde als hunderte. (sind bereits ca. 115 Dateien, alles schön sauber getrennt nach MVC :wink: )

Gruß,
ROOTer
 

EagleEye

Bekanntes Mitglied
ja es kommt immer auf die Größe an.
wenns nur 10k sind die die Jar groß ist dann is das doch egal.
Wobei das jedem selbst überlassen ist ;)
Ich peröslich bevorzuge das ganze Jars zuersetzen weil man so nichts vergessen kann
 

ROOTer

Mitglied
@EagleEye: Ja, da spricht grundsätzlich nichts dagegen. Ich werde sehen wie ich es umsetze, versuche es gegen Ende nächster Woche fertig zu haben - mal schauen ;o)

Ein anderer Ansatz wäre, immer die aktuellste Version des kompletten Programms ins Web zu stellen und jede Datei einzeln zu überprüfen ob sie auf dem Server neuer ist als lokal auf der Festplatte und dann automatisch nur die neueren Dateien runterladen...
 

EagleEye

Bekanntes Mitglied
naja dieser Ansatz wäre nicht so gut weil mach mal 100 oder mehr Anfragen auf einen Server erstmal wird der Server bei mehreren Programmen gleichzeitig dir irgendwann Streicken und auch der Traffic ist nicht gerade gering
 

ROOTer

Mitglied
Naja, der Meinung bin ich weniger, der Rechner wird nicht streigen nur weil er eine for-Schliefe übers FTP-Protokoll an einen Internetserver ausführt. Um den Traffic mache ich mit garkeine Sorgen da die Abfrage keine Daten transferiert.
Vielmehr sehe ich den Nachteil bei dieser Methode, das mein Updateprogramm nicht merkt wenn neue Dateien hinzugekommen sind. Aber das könnte man auch Lösen indem man das Webverzeichnis mit dem lokalen vergleicht und nicht umgekehrt. :bae:

Nein, eigentlich auch eine schöne Lösung welche nichtmal eine Datenbank benötigt. :!:


Viele Grüße,
ROOTer
 

EagleEye

Bekanntes Mitglied
Du mußt aber mehrere Sachen bedenken
1. du gibst damit deine FTP Daten weiter
2. du mußt eine 100%ige Methode entwickeln um rauszubekommen obs eine neue Datei ist oder nicht
3. du hast eine Menge Traffic du mußt immer eine Anfrage senden dann bekommst du eine Antwort das sind immer ASCII Zeichen das macht ~10 KB schätz ich mal pro Datei
4. du weißt nicht was der User für eine Leitung hat da kann sich sowas immer lange hinziehen

Wenn du einzelne Dateien machen willst dann leg auf dem Server eine Datei ab die dir sagt welche Dateien zu welche Build geändert wurden so das du nicht jede Datei überprüfen mußt
und du mußt bedenken 100 Dateien sind fast nichts das werden immer mehr ;)
 

ROOTer

Mitglied
ja, ok -> jetzt bin ich mir sicher, ich werde es doch so machen wie weiter oben geschrieben. Datenbank in der alle dateien aufgelistet sind die sich zum Versionswechsel geändert haben und diese dateien dann alle mittels FTP übertragen...

Genau so werde ich das machen :D


Gruß,
ROOTer
 

EagleEye

Bekanntes Mitglied
gute Einsicht ;)
aber eins mußt du bedenken gib dem Programm einen Account der nur lesen darf sonst könntest du bald ein Problem in deiner Datenbank bekommen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Zusammen übers (Internet) spielen Allgemeine Java-Themen 3
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
J Internet Broswer in Threads öffnen Allgemeine Java-Themen 1
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
E Java und Internet überwachen? Allgemeine Java-Themen 4
V Gibt es eine Möglichkeit die Internet auslastung mit Java auszulesen Allgemeine Java-Themen 11
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Allgemeine Java-Themen 3
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
H Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException Allgemeine Java-Themen 5
M Film Informationen aus Internet beziehen Allgemeine Java-Themen 4
J Echte Adressen aus Internet Allgemeine Java-Themen 28
J Wie kann man .txt Files übers Internet verschicken? Allgemeine Java-Themen 53
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
N Was hat java mit dem internet zu tun? Allgemeine Java-Themen 7
F CSV-Datei aus Internet lesen Allgemeine Java-Themen 2
T Link zum Internet Allgemeine Java-Themen 12
F Datei aus dem Internet öffnen Allgemeine Java-Themen 7
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
N Internet Explorer mit bestimter Java Runtime starten Allgemeine Java-Themen 2
X Audio Internet-Stream Allgemeine Java-Themen 2
F Internet Verbindung verschlüsseln Allgemeine Java-Themen 17
S HTTP Filmgenre aus dem Internet abfragen! Allgemeine Java-Themen 6
M JAR Internet verbieten? Allgemeine Java-Themen 5
J Dateityp im Internet Allgemeine Java-Themen 3
E Internet Explorer startseite festlegen, Adressleiste sperren Allgemeine Java-Themen 3
A Java Entwicklung übers Internet Allgemeine Java-Themen 10
N Mobiles Internet Allgemeine Java-Themen 6
P Bild aus dem Internet speichern Allgemeine Java-Themen 4
G HTML-Code aus dem Internet downloaden Allgemeine Java-Themen 3
K Frage zum thema Java und Internet Allgemeine Java-Themen 49
S API zum Lesen von Song Lyrics aus'm Internet? Allgemeine Java-Themen 7
N Applet läut nicht im Internet Explorer Allgemeine Java-Themen 4
L Internet Cache löschen Allgemeine Java-Themen 3
W Internet Seite mit login 1x od. 2x Allgemeine Java-Themen 5
R Servlet Probleme im Internet Explorer (per LAN) Allgemeine Java-Themen 4
Q Internet Explorer im Vollbildmodus starten Allgemeine Java-Themen 7
R Zugriff auf Internet Explorer Cache Allgemeine Java-Themen 8
M Ein Spiel vom Internet rippen Allgemeine Java-Themen 2
P Html-Seite aus dem Internet speichern Allgemeine Java-Themen 11
EagleEye bild aus dem internet laden oder imageicon speichern Allgemeine Java-Themen 5
S Welche Java Techologien gibt es fürs Frontend Allgemeine Java-Themen 4
P Effizientes Programmieren - oder Windows Autostart fürs Herunterfahren Allgemeine Java-Themen 11
thE_29 $ in String ersetzen fürs nochmalige ersetzen.. (JavaBug?) Allgemeine Java-Themen 7
F Java fürs Handy Allgemeine Java-Themen 3
U Beste Methode fürs Profiling Allgemeine Java-Themen 16
K App fürs Intranet Allgemeine Java-Themen 4
I Programm fürs Handy Allgemeine Java-Themen 3
N Was benötigt man fürs Java Media Framework? Allgemeine Java-Themen 12
A Prof. Lib fürs Drucken Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben