Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm Updaten (https://www.delphipraxis.net/12607-programm-updaten.html)

CoRe.eXtreem 30. Nov 2003 20:32


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:
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;
Wäre sehr nett wenn mir hier jemand weiter helfen könnte! :P

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Stanlay Hanks 30. Nov 2003 20:36

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:

CoRe.eXtreem 30. Nov 2003 20:40

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

Thunderchild 30. Nov 2003 20:41

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.

himitsu 30. Nov 2003 20:42

Re: Programm Updaten
 
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

schau mal in diesen Beitrag: Buttonklick und Programm neustarten [Hilfe]

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

CoRe.eXtreem 30. Nov 2003 20:46

Re: Programm Updaten
 
Vielen Dank für die schnellen Antworten! Gefällt mir hier super! Werde es mit einer Batchdatei versuchen. :gruebel:

CoRe.eXtreem 30. Nov 2003 20:54

Re: Programm Updaten
 
weiß jemand wie ich das hier einbinde?

Delphi-Quellcode:
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);
Viele Grüße Core

Stanlay Hanks 30. Nov 2003 21:01

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:

himitsu 30. Nov 2003 21:02

Re: Programm Updaten
 
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

so könnte es wohl geh'n:
Delphi-Quellcode:
var f: Textfile;
s1, s2, s3: Sting;
Einfach diesen Teil nach dem Download deines Updates einfügen:
Delphi-Quellcode:
    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);
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

CoRe.eXtreem 30. Nov 2003 21:18

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

himitsu 30. Nov 2003 21:40

Re: Programm Updaten
 
http://www.FrankNStein.de/Smiley-Wolke.gif Hallöle.

Diese Code erstellt die Batchdatei und Startet diese.
Die Batchdatei wartet dan bis das Progragramm beendet wurde, löscht dieses, copiert das Update und startet dein Programm wieder.

Da dieser Code aber nicht dafür gedacht war das Update aus einem Unterprogramm zu hollen, hatte ich nur noch das Verzeichnis im Code geändert.
Hab diesen Fehler jetzt behoben:
Delphi-Quellcode:
    s1 := Paramstr(0);
    s2 := ExtractFilePath(Paramstr(0)) + 'Update\update.upd';
    s3 := ChangeFileExt(Paramstr(0),'.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, 'Copy "'+s2+'" "'+s1+'"');
    WriteLn(f, '"'+s1+'"');
    WriteLn(f, 'Erase "'+s3+'"');
    CloseFile(f);
    ShellExecute(handle,'open',PChar(s3),nil,PChar(ExtractFileDir(ParamStr(0))),SW_HIDE);
(aber nicht getestet)

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

CoRe.eXtreem 30. Nov 2003 21:48

Re: Programm Updaten
 
Erstmal fettes Lob aber jetzt kommt IO Error 32 :oops: . Sorry ich kapiere das aber noch nicht so ganz. Kannst du mir nochmal helfen :oops: :zwinker:


Jetzt weis ich wieso ich habe die ganze Procedure in eine ProgressBar gesetzt :pale:

Vielen Dank an euch alle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz