# Auto-Update programmieren!



## Elias177 (17. Jul 2018)

Hey zusammne,

ich bin gerade dabei eine Software zu entwickeln und möchte in diese gerne einbauen das die Software automatisch geupdaded wird und da ich in diesen bereich kaum kenntnisse habe wäre es sehr hilfreich wenn mir das vlt. jemand erklären könnte oder mir einen link schicken könnte in dem es gut erklärt wird da ich auf Google nichts hilfreiches gefunden habe.(Ich weiß nicht wo ich dieses Thema einordnen soll)

MFG
Elias177

P.S. Meine Rechtschreibung ist nicht die Beste!


----------



## Thallius (17. Jul 2018)

Wo ist das problem?

Du brauchst halt einen Server aufxdem die Updates liegen, dann schaust du bei jedem Programmstsrt nach ob auf diesem Server eine neue Version liegt und wenn ja, dann lädst du sie herunter unter installierst sie  

Kompliziert wird dann nur die Sache zu sichern, so dass sich z.B. kein MIT dazwischen hängen kann und die eine Fake Software übermittelt 

Gruss

Claus


----------



## Elias177 (18. Jul 2018)

Okay,
Nur wie stelle ich das an ? Ich  möchte ja auch das nur neue Dateinamen heruntergeladen werden und nicht alles neu.

(Vlt. Könnte mir jemand einen Beispiel Code senden )


----------



## mihe7 (18. Jul 2018)

Stell halt einfach nur die neueste Version auf dem Server zur Verfügung.


----------



## Elias177 (18. Jul 2018)

Okay lädt er dann nur die geänderten Dateinamen herunter oder lädt er alles neu herunter ?


----------



## Dompteur (18. Jul 2018)

Stell einfach eine Info-Datei auf den Server, die die aktuelle Versionsnummer deiner Anwendung beinhaltet.
Die Info-Datei kann zusätzlich noch eine Liste aller Filenamen, die die Version benötigt enthalten. Sie sollte daher nur ein paar 100 Byte groß sein.

Diese Info-Datei liest du bei jedem Programmstart von Server und vergleichst sie mit der Version des laufenden Programms.
Wenn am Server etwas neues liegt, holst du dir die angeführten Files.


----------



## Elias177 (18. Jul 2018)

Okay so weit alles gut nur ich habe leider keine Idee wie ich das programmieren soll da ich das noch nie gemacht habe und dies mein erstes mal ist.


----------



## mrBrown (18. Jul 2018)

Elias177 hat gesagt.:


> Nur wie stelle ich das an ? Ich möchte ja auch das nur neue Dateinamen heruntergeladen werden und nicht alles neu.





Elias177 hat gesagt.:


> Okay lädt er dann nur die geänderten Dateinamen herunter oder lädt er alles neu herunter ?


Was meinst du überhaupt mit "geänderte Dateinamen"?


----------



## Elias177 (18. Jul 2018)

Sry das war die Autokorektur vom Handy ich meinte dass nur die Dateien heruntergeladen werden solen die geändert oder neu sind.


----------



## Thallius (18. Jul 2018)

Dir ist aber schon klar, dass ein Java Programm normalerweise erstmal nur aus einer Datei besteht nämlich der .jar?


----------



## mrBrown (18. Jul 2018)

Thallius hat gesagt.:


> Dir ist aber schon klar, dass ein Java Programm normalerweise erstmal nur aus einer Datei besteht nämlich der .jar?


Man kann es aber durchaus sehr Modular halten und die meiste Funktionalität als "Plugin" anbinden


----------



## Elias177 (18. Jul 2018)

Ja aber ich habe auch noch Texturen und andere dateien die nicht in der .jar sind sondern in ordnern und diese muss ich halt auch updaten


----------



## Thallius (18. Jul 2018)

Alles zusammenpacken in ein .zip und nach dem Download wieder entpackt. Fertig


----------



## Elias177 (18. Jul 2018)

Okay so weit so gut doch habe ich noch ein problem wenn ich es so mache ich muss am anfang ja die version vom client mit dem vom server vergleichen und da ist mein Problem wie vergleiche ich diese oder generell wie kann ich etwas an den server senden und er gibt mir daruf dan eine antwort. Dazu habe ich auch schon ein Thema erstellt: https://www.java-forum.org/thema/befehl-senden-und-antowrt-bekommen.182167/


----------



## Thallius (18. Jul 2018)

Vielleicht solltest du erstmal 5 Schritte zurück gehen und dich mit Webservices beschäftigen. Sprich HTTP Requests, Authentifizierungen etc. Wenn Du davon überhaupt keine Ahnung hast kannst du dich damit erstmal ein paar Wochen beschäftigen bevor du wieder zu deinem Update Problem zurück kommst.


----------



## mihe7 (18. Jul 2018)

@Elias177 Dafür brauchst Du nicht unbedingt einen eigenen Server zu schreiben. Stell einfach zwei Dateien über einen stinknormalen Web-Server zur Verfügung: latest.txt und latest.zip. In latest.txt schreibst Du einfach die Versionsnummer rein. Zur Überprüfung, ob eine neue Version vorliegt, rufst Du natürlich latest.txt ab, liest die Versionsnummer aus und vergleichst diese mit der Versionsnummer Deiner Anwendung. Stellst Du fest, dass ein Update vorliegt, lädst Du latest.zip herunter und entpackst es. Thema erledigt.


----------



## Thallius (18. Jul 2018)

mihe7 hat gesagt.:


> @Elias177 Dafür brauchst Du nicht unbedingt einen eigenen Server zu schreiben. Stell einfach zwei Dateien über einen stinknormalen Web-Server zur Verfügung: latest.txt und latest.zip. In latest.txt schreibst Du einfach die Versionsnummer rein. Zur Überprüfung, ob eine neue Version vorliegt, rufst Du natürlich latest.txt ab, liest die Versionsnummer aus und vergleichst diese mit der Versionsnummer Deiner Anwendung. Stellst Du fest, dass ein Update vorliegt, lädst Du latest.zip herunter und entpackst es. Thema erledigt.



Naja man sollte schon zumindest ein wenig auf Sicherheit achten. Also das mindeste ist, dass in der Versionsdatei noch ein Hash mit einem Secret Key über die u downloadende Datei enthalten ist , der von der update Methode nach dem download gegen geprüft wird um sicher zu stellen, dass auch wirklich das Paket beim User angekommen ist, welches du auf deinen Server gelegt hast.


----------



## mihe7 (18. Jul 2018)

Thallius hat gesagt.:


> Naja man sollte schon zumindest ein wenig auf Sicherheit achten


Da hast Du natürlich Recht.


----------



## Elias177 (18. Jul 2018)

Das würde doch bestimmt auf einem Raspberry Pi 3 B gehen oder ?


----------



## mihe7 (18. Jul 2018)

Elias177 hat gesagt.:


> Das würde doch bestimmt auf einem Raspberry Pi 3 B gehen oder ?



Klar.


----------



## Elias177 (20. Jul 2018)

Sollte ich dafür lieber eine extra .jar datei schreiben dann kann ich es so machen ich kann beim Start der Hauptsoftware das Update Programm starten und in der zeit zeit die Hauptsoftware schließen so dass wenn es ein update gibt es keine probleme gibt bei laufenter anwendung daten zu ändern ! Oder habt ihr andere ideen ?
Ich habe bis jetzt das auf einem Server eine Datei liegt in der die Version steht und ein Ordner wo die Update datei drinne ist die dann heruntergeladen wird.


----------



## mihe7 (20. Jul 2018)

Elias177 hat gesagt.:


> dass wenn es ein update gibt es keine probleme gibt bei laufenter anwendung daten zu ändern


Das hört sich sehr vernünftig an.


----------



## Elias177 (20. Jul 2018)

ok


----------



## Neumi5694 (23. Jul 2018)

Was das Versionsmanagement angeht …
Hast du schon über SVN nachgedacht?

Damit werden Dateiversionen mit dem Server abgeglichen und du sparst dir einen Haufen Arbeit. Das Rad muss nicht neu erfunden werden.


Schau dir mal TortoiseSVN an, installier dir einen Server und spiel etwas damit herum. Du kannst dann ja deinen eigenen (unsichtbaren) Client schreiben, der beim Endbenutzer die Daten abgleicht, ohne welche zurück auf den Server zu schreiben.
Für ein reines Java Programm ist das vielleicht etwas Overkill, aber es funktioniert. Schau eventuell mal nach, was die Jungs von JDownloader verwenden. Da lädst du ebenfalls nur eine Jar runter, die sich dann den ganzen Rest zieht (auch die Jar selbst kann upgedatet werden). So oder so musst du nicht alles selbst entwickeln unddich mit Hashes und was weiß ich was rumschlagen. Gerade in dem Bereich gibt's genug existierende Lösungen.

https://www.java.com/de/download/faq/deployment_toolkit.xml


----------



## AliasAlreadyTaken (30. Jul 2018)

Irgendwie muß das Programm ja mal zum "Kunden" gekommen sein. Über welchen Vertriebskanal kriegt es denn der Zielrechner? Lädt sich der Anwender das einfach irgendwo runter? Gibt ja schon massig vorhandene Möglichkeiten, ein Programm aktuell zu halten, die fast alle nichts mit Java zu tun haben.

Wenns nur drum geht, dem Benutzer anzuzeigen "Du mußt jetzt ein Update laden" oder gar das einigermaßen automatisiert in Java zu erledigen, dann gibts hier ja schon genügend schlaue Vorschläge. 

Ansonsten wäre eine genauere Problembeschreibung gut - vor allem, auf welcher Ebene du ansetzen willst. ("Ich suche eine library, die das für mich erledigt!" oder "Ich will Debian-Pakete bauen!" oder "Ich will das von Hand implementieren, und zwar ungefähr so:" oder "Also mein EIGENTLICHES Problem ist, daß ich verteilte Pakete habe, die miteinander synchron gehalten werden müssen!")


----------

