![]() |
Programm Updaten
Hallo,
ich versuche gerade ein Live-Update in mein Programm ein zu bauen. So weit so gut! Aber wie ersetze ich das Laufende Programm mit einer Heruntergeladenen Datei?? Hier ist der Quellcode;
Delphi-Quellcode:
Wäre sehr nett wenn mir hier jemand weiter helfen könnte! :P
procedure TForm1.Update2Click(Sender: TObject);
var old, new : string; begin if DownloadFile('http://www.ensacom.de/Delphiprogramme/Delphimanager/update.ini',(Extractfilepath(Application.exename)+'Update\update.000')) then begin DownloadFile('http://www.ensacom.de/Delphiprogramme/Delphimanager/update.upd',(Extractfilepath(Application.exename)+'Update\update.upd')); end; iniold := tinifile.Create(Extractfilepath(Application.exename)+'Update\update.ini'); try old := iniold.ReadString('Version','Datum',''); finally iniold.Free; end; ininew := tinifile.Create(Extractfilepath(Application.exename)+'Update\update.000'); try new := ininew.ReadString('Version','Datum',''); finally ininew.Free; end; if old < new then begin if MessageDlg('Es ist ein neues Update verfügbar. Jetzt installieren?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin deletefile(Extractfilepath(Application.exename)+'Update\update.ini'); renamefile(Extractfilepath(Application.exename)+'Update\update.000',(Extractfilepath(Application.exename)+'Update\update.ini')); UpdateInstallieren(self); <-- das Funktionier nicht??? end; end else begin showmessage('Kein neues Update verfügbar!'); deletefile(Extractfilepath(Application.exename)+'Update\update.000'); deletefile(Extractfilepath(Application.exename)+'Update\update.upd'); end; end; [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Re: Programm Updaten
Hallo und herzlich willkommen in der DP :hello:
Kannst du bitte die Delphi Code Tags benutzen, das macht den Code übersichtlicher und besser zu lesen. Ich hab den Code jetzt nicht genau gelesen, aber mein Vorschlag wäre: Ein zweites, externes Programm schreiben, dass von der alten Anwendung gestartet wird. Dieses Externe Programm beendet dann das alte und überschreibt es mit der Neuen Datei. Ich glaub nicht, dass du dein Programm so einfach sich selbst überschreiben lassen kannst. man liest sich, Stanlay :hi: |
Re: Programm Updaten
Super empfang... Kenne mich halt noch nicht so gut aus in der DP! Gute Idee aber das muss doch auch so irgendwie klappen, sonst muss ich alles umschreiben? :mrgreen:
Viele Grüße... CORE |
Re: Programm Updaten
Du könntest das neue Programm temporär speichern. (z.B. Programmname.ex_).
Dann legst Du ein kleines Programm dazu, welches von Deiner Anwendung beim Beenden aufgerufen wird. Es ersetzt dann die Dateien und könnte auch die Anwendung neu starten. Über einen Parameter (oder eine Tempdatei, erstellt von der Anwendung) könntest Du dann auch an die alte Position vom Beenden zurück kehren. Etwas umständlicher wäre das Ersetzen über den RunOnce-Eintrag in der Registry. Dieser wird aber erst bei einem Neustart durchgeführt und wäre somit für ein kleines Programm bzw. eines, das nichts mit dem System zu schaffen hat, kaum passend. |
Re: Programm Updaten
Ein Hallöle von
![]() schau mal in diesen Beitrag: ![]() http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Programm Updaten
Vielen Dank für die schnellen Antworten! Gefällt mir hier super! Werde es mit einer Batchdatei versuchen. :gruebel:
|
Re: Programm Updaten
weiß jemand wie ich das hier einbinde?
Delphi-Quellcode:
Viele Grüße Core
var f: Textfile;
s1, s2, s3: Sting; begin s1 := extractFilename(paramstr(0)); s2 := ChangeFileExt(s1,'.ex_') s3 := ChangeFileExt(s1,'.bat') AssignFile(f, s3); ReWrite(f); WriteLn(f, '@echo off'); WriteLn(f, ':1'); WriteLn(f, 'Erase '+s1); WriteLn(f, 'If exist '+s1+' Goto 1'); WriteLn(f, 'ren '+s2+' '+s1); WriteLn(f, s1); WriteLn(f, 'Erase '+s3); CloseFile(f); ShellExecute(handle,'open',PChar(s3),nil,PChar(ExtractFileDir(ParamStr(0))),SW_HIDE); |
Re: Programm Updaten
Und nochmal hi!
Das ganze muss, soweit ich das gelesen und verstanden hab, in eine Batch Datei. Man liest sich, Stanlay :hi: |
Re: Programm Updaten
Ein Hallöle von
![]() so könnte es wohl geh'n:
Delphi-Quellcode:
Einfach diesen Teil nach dem Download deines Updates einfügen:
var f: Textfile;
s1, s2, s3: Sting;
Delphi-Quellcode:
http://www.delphipraxis.net/images/common/divider.jpg
s1 := extractFilename(paramstr(0));
s2 := '"'+ExtractFilePath(s1) + 'Update\update.upd"'; s3 := '"'+ChangeFileExt(s1,'.bat')+'"'; AssignFile(f, s3); ReWrite(f); WriteLn(f, '@echo off'); WriteLn(f, ':1'); WriteLn(f, 'Erase '+s1); WriteLn(f, 'If exist '+s1+' Goto 1'); WriteLn(f, 'ren '+s2+' '+s1); WriteLn(f, s1); WriteLn(f, 'Erase '+s3); CloseFile(f); ShellExecute(handle,'open',PChar(s3),nil,PChar(ExtractFileDir(ParamStr(0))),SW_HIDE); ![]() ![]() ![]() |
Re: Programm Updaten
Das ganze kann man aber in das Programm integrieren oder muss man da ne einzelne Batch datei schreiben. Ich hab das mal probiert da kommt IO ERROR 123-
Viele Grüße und Vielen Dank für eure bemühungen! :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz