Entwickler-Ecke
Internet / Netzwerk - Automatisches Update
Psyko²k - Di 25.10.05 23:17
Titel: Automatisches Update
Hey Leute!
Ich würde gerne Wissen, wie ich in mein Programm eine Funktion einbauen kann, die beim Start überprüft ob eine Neue Version von Datei
x.exe Vorhanden ist, sie gegenfalls lädt und das programm dann mit der neuen x.exe Startet.
Hab keine Idee wie ich vorgehen soll.
Danke für alle hilfen
Greets
Calyptus - Mi 26.10.05 00:25
Also ich würd mir irgendwo im Web eine MySQL Datenbank holen und dann in eine Tabelle den Namen des Programms, die neuste Version und ein Link zum Programm.
Beim Start von deinem Programm vergleicht es seine Version mit der in der Datenbank und wenn es eine neuere gibt läd es die runter. Man könnte es ja noch so machen das dann das neue Programm gestartet wird, welches als erstes mal das alte schließt und löscht.
Ist jetzt nur das Prinzip wie ichs machen würd, keine Garantie das es so auch sinnvoll ist. Ich vermute jetzt einfach mal, dass man das alles mit irgendwelchen Indy Komponenten machen kann. Aber sicher bin ich mir nicht!
Stefan.Buchholtz - Mi 26.10.05 11:10
Das mit der MySQL-Datenbank finde ich zu aufwendig. Du legst einfach eine Textdatei auf deinen Webserver, die die aktuelle Versionsnummer und den Download-Link enthält. Die kannst du mit der Indy http-Clientkomponente (TidHTTP) mit Get('http://mein.web-server.de/version.txt') abholen und die Versionsnummer vergleichen. Die neue Programmversion kannst du auch mit der Indy-Komponente downloaden oder den Download-Link einfach mit ShellExecute aufrufen - dann wird die neue Version mit dem Standard-Browser des Users heruntergeladen.
Stefan
Psyko²k - Mi 26.10.05 15:30
Ok Danke für Eure Hilfe
Psyko²k - Mi 26.10.05 18:15
Hab jetzt alles soweit hinbekommen...
Nur weis ich nicht wie ich die Exe Laden kann bzw. wie ich angeben kann wo sie gespeichert wird.
Also eine xy.exe soll in C:\Mein Programm geladen werden.
Mit Indy Get('...
Stefan.Buchholtz - Mi 26.10.05 18:36
Psyko²k hat folgendes geschrieben: |
Hab jetzt alles soweit hinbekommen...
Nur weis ich nicht wie ich die Exe Laden kann bzw. wie ich angeben kann wo sie gespeichert wird.
Also eine xy.exe soll in C:\Mein Programm geladen werden.
Mit Indy Get('... |
Das machst du am besten mit der Stream-Variante der Get-Funktion. Da kannst du einen TFileStream für die neue Exe erstellen und vom Get direkt da rein schreiben lassen:
Delphi-Quelltext
1: 2: 3:
| newExecutable := TFileStream.Create(ChangeFileExt(Application.ExeName), '.new'), fmCreate); IDHttp.Get(newVersionUrl, newExecutable); newExecutable.Free; |
Dann hast du die neue Datei unter dem gleichen Namen wie die ursprüngliche Exe, aber mit der Extension "new". Dann brauchst du noch ein kleines Tool, das deine Original-Exe löscht, die Neue umbenennt und dann startet. Wenn der Download fertig ist, startest du das Tool und beendest das Original-Programm. Dein Tool, das die neue Exe installiert, sollte natürlich warten, bis sich das alte Programm beendet hat.
Vor dem Update solltest du ausserdem prüfen, ob du in das Programmverzeichnis überhaupt Schreibrechte hast. Ein Benutzer, der unter Windows 2000 oder XP mit eingeschränkten Rechten arbeitet, darf ja normalerweise nicht in Programmverzeichnisse schreiben.
Stefan
bonanza - Sa 03.12.05 14:05
Hi,
ich wollte das selbe machen wir der poststarter...allerdings habe ich keine Ahnung, wie ich das anstellen soll
ich hab mir gerade INDY 10 geladen und installiert (habe Delphi 7).
Also ich habe hier mein Programm und möchte nun kontrollieren, ob es eine neuere version gibt...
die version.txt habe ich bereits auf dem server angelegt....
wäre nett, wenn mir einer nun erklären könnte, was ich nun genau mit diese Indykomponente machen muss
danke
reepo2k - Sa 03.12.05 14:52
bonanza hat folgendes geschrieben: |
Hi,
ich wollte das selbe machen wir der poststarter...allerdings habe ich keine Ahnung, wie ich das anstellen soll
ich hab mir gerade INDY 10 geladen und installiert (habe Delphi 7).
Also ich habe hier mein Programm und möchte nun kontrollieren, ob es eine neuere version gibt...
die version.txt habe ich bereits auf dem server angelegt....
wäre nett, wenn mir einer nun erklären könnte, was ich nun genau mit diese Indykomponente machen muss
danke |
Mach dir erstmal eine Konstante im Programm, in der die Versionsnummer deines Programmes steht:
Delphi-Quelltext
1:
| const version = '1.0.0'; |
Danach legst du eine Datei namens version.txt an, in der deine aktuelle Version steht und lädtst diese hoch.
Danach klatscht du die idHTTP Komponente von Indy auf deine Form.
Um jetzt zu checken ob eine neue Version vorhanden ist machst du folgendes:
Delphi-Quelltext
1: 2: 3: 4:
| If IdHTTP1.Get('http://www.url.de/version.txt') <> version then begin ShowMessage('Neue Version verfügbar...'): end; |
Das kannst du natürlich bei onActivate doer onCrete reinhauen, oder bei nem Button bei onClick.
Natürlich kannst du das ShowMessage auch durch das ersetzten, was passieren soll, wenn eine neue Version vorhanden ist.
MfG: reepo2k
Amateur - Sa 03.12.05 15:20
und du solltest noch überlegen was du aktualisierst. ich würde nicht jedesmal eine neue exe runterladen sondern alles was aktualisiert werden soll würde ich in ne dll machen und nur die dll neu laden. oder eben ne res datei für bilder etc. und in deiner exe solltest du die ganzen sachen nur noch aus den dlls und res dateien laden...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!