Autor Beitrag
Psyko²k
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Di 25.10.05 23:17 
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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 386

Win Xp Prof
D3, D6 Pers, D7 Ent
BeitragVerfasst: 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!

_________________
Luft- und Raumfahrtechnik an der Uni Stuttgart
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Mi 26.10.05 15:30 
Ok Danke für Eure Hilfe
Psyko²k Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mi 26.10.05 18:36 
user profile iconPsyko²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:

ausblenden 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
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mi 26.10.05 18:40 

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
bonanza
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 138

WIN XP
Borland Delphi 7 Enterprise, Microsoft Visual C++ 6.0 Enterprise, Macromedia Dreamweaver 8
BeitragVerfasst: Sa 03.12.05 14:52 
user profile iconbonanza 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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: 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...

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700