Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Einfaches Online Update (https://www.delphipraxis.net/107541-einfaches-online-update.html)

Poseidon 11. Jul 2008 17:23

Re: Einfaches Online Update
 
Ne, beim öffnen der Seite wird die Exe ausgeführt sprich das installationsprogramm startet. Der Anwender drückt auf installieren und das Programm wird insstalirt.
Aber du hast recht, der Anwender erwartet nichts tun zu müssen um das Programm upzudaten.

gmc616 11. Jul 2008 18:38

Re: Einfaches Online Update
 
Zitat:

Zitat von Poseidon
Ne, beim öffnen der Seite wird die Exe ausgeführt sprich das installationsprogramm startet.

Bei mir nicht. Und ich denke bei den meisten Usern auch nicht. Im Gegenteil.
Es kommt ein Speicherndialog und danach wird die Datei gespeichert. Und wenn ich versuche die Datei zu öffnen, warnt mich sogar der Browser vorher, die Exe zu starten.

Wäre zu krass, wenn mein Rechner einfach eine Datei, die er aus dem Internet lädt, sofort öffnen würde.

So ein Online-Update wäre sehr benutzerunfreundlich und wüsste genau, dass ich diese Software nie wieder verwenden bzw. updaten würde.

Nix für ungut. :zwinker:

So und nun ab in den Urlaub. :dancer:

Poseidon 12. Jul 2008 17:32

Re: Einfaches Online Update
 
Ok, Ok, vielleicht hast du ja recht. Aber wie downloadet und installiert man die software (update der software) dann??
Also das fehlt im Toturial noch, obwohl es doch eigendlich darum im Tutorial gehen sollte.

Larsi 12. Jul 2008 19:00

Re: Einfaches Online Update
 
Du meinst das die alte Datei gelöscht wird und die neue startet?

Missionar 13. Jul 2008 09:12

Re: Einfaches Online Update
 
Könnte diesen Thread bitte mal jemand nach Klatsch und Tratsch verschieben. Mit Tutorial hat dies nun wirklich nichts zu tun.

Poseidon 13. Jul 2008 10:20

Re: Einfaches Online Update
 
@Larsi Genau das! Das fehlt im Titurial und dabei sid das doch einer der wichtigsten Stellen. Oder glaubst du der Anwender freud sich wenn er die Meldung bekommt: Update möglich, er drückt updaten und nichts geschiet?

SaFu 14. Jul 2008 08:32

Re: Einfaches Online Update
 
Liste der Anhänge anzeigen (Anzahl: 1)
So ich habe Poste mal mein Update, ich habe es auf der Basis von Larsi aufgebaut.

Delphi-Quellcode:
  private
  bUpdateNochOffen : Boolean;
  function IsInternetConectet: Boolean; // Internetverbindung überprüfen
  procedure DownloaddateiPruefen;

  public
  INIEinstellungenProgramm,IniProgrammeinstellung :TFileName;
 
  {Constanten für Ini.}
  const DownloadInfo = 'DownloadInfo';
        BtnUpdatInstall = 'Installation steht noch aus';
        BtnUpdateueberp = 'Updateüberprüfung';
        BtnDownload = 'Downloaden';

        ProgrammInfo = 'Programminfo';
        Programmversion = 'Programmversion';

  end;

var
  UpdateForm: TUpdateForm;

implementation


{$R *.dfm}

{ TUpdateForm }

//=====Einstellungen laden=============================
procedure TUpdateForm.FormShow(Sender: TObject);
begin
  Edit5.Text:= Form1.GetFileVersion(ParamStr(0)); // Programversion auslesen

  if not FileExists(ExtractFilePath(ParamStr(0))+ 'Einstellungen\ProgrammSettings.ini') then
   begin
    IniProgrammeinstellung:= (ExtractFilePath(ParamStr(0))+ 'Einstellungen\ProgrammSettings.ini');
     begin
      with TMemIniFile.Create(IniProgrammeinstellung ) do
      try
       begin
        WriteString(Programminfo,Programmversion,'0');
        WriteBool(DownloadInfo,BtnUpdateueberp,True);
        WriteBool(DownloadInfo,BtnDownload,False);
        WriteBool(DownloadInfo,BtnUpdatInstall,False);
        UpdateFile;
       end;
      finally
       Free;
      end;
     end;
   end;
   
  // Lokale Einstellungen für Programm
  IniProgrammeinstellung:= (ExtractFilePath(ParamStr(0))+ 'Einstellungen\ProgrammSettings.ini');
   with TMemIniFile.Create(IniProgrammeinstellung) do
    try
     Label11.Caption:= ReadString(Programminfo,Programmversion,Label11.Caption);
     BtnUpdateUeberpruefung.Enabled:= ReadBool(DownloadInfo,BtnUpdateueberp,BtnUpdateUeberpruefung.Enabled);
     BtnUpdateDownloaden.Enabled:= ReadBool(DownloadInfo,BtnDownload,BtnUpdateDownloaden.Enabled);
     BtnUpdateInstallieren.Enabled:= ReadBool(DownloadInfo,BtnUpdatInstall,BtnUpdateInstallieren.Enabled);
     bUpdateNochOffen:= ReadBool(DownloadInfo,BtnUpdatInstall,bUpdateNochOffen);
    finally
     Free;
    end;


  if bUpdateNochOffen = True then // wenn das Installieren des Updates noch aussteht
   begin
    Label15.Visible:= True;
    Label15.Font.Color:= ClRed;
    Label15.Caption:= ('Update Installation steht noch aus!!!');
   end
  else
  begin
   Label15.Visible:= False;
  end;
end;


//=========Updateüberprüfung starten==================
procedure TUpdateForm.Button2Click(Sender: TObject);
var DownloadDatei,DownloadZiel: PChar;
begin
 try
   if IsInternetConectet = True then // Internet Verbindung da
    begin
     ProgressBar1.Position:= 0;
     Label6.Font.Color:= ClLime;
     Label6.Caption:= 'Überprüfung gestartet';
      try
       DownloadDatei:= 'http://Techniker-werden.de/update/UpdateDatei.txt'; // Von Internetseite Versions Info
       DownloadZiel:= PChar(ExtractFilePath(ParamStr(0))+ 'Einstellungen\System\UpdateDatei.txt'); // Ins Zielverzeichnis
     
       UrlDownloadToFile(nil, DownloadDatei, DownloadZiel, 0, nil); Von --> Nach Downloaden
       
       Label6.Font.Color:= ClLime;
       Label6.Caption:= 'Überprüfung beendet';

      except
       Label6.Font.Color:= ClRed;
       Label6.Caption:= ('Überprüfung abgebrochen');
      end;
     DownloadDateiPruefen;
    end
   else
   begin
    Form1.MessageDlgPos2('Es besteht keine Verbindung zum Internet',mtInformation,[mbOk],self);
    BtnUpdateInstallieren.Enabled:= False;
    Edit5.Text:= Form1.GetFileVersion(ParamStr(0));// versionsnummer anzeigen
   end;
  except
   Form1.MessageDlgPos2('Unbekannter Fehler',mtInformation,[mbOk],self);
 end;
end;

//========exe updaten==========================================================
procedure TUpdateForm.Button3Click(Sender: TObject);
var DownloadEXE,DownloadEXEZiel: PChar;
begin
 TimerLabelBlinken.Enabled:= False; // Blinken von Label wenn Update vorhanden

 Label7.Visible:= true;
 Label7.Font.Color:= ClLime;
 Label7.Caption:= ('Download wird gestartet bitte warten');

 Label12.Font.Color:= ClLime;
 Label12.Caption:= 'Download wird gestartet bitte warten';

  try
    DownloadEXE:= 'http://Techniker-werden.de/update/Programm.exe'; // Programm Downloaden
    DownloadEXEZiel:= PChar(ExtractFilePath(ParamStr(0))+ 'Einstellungen\System\Programm.exe'); //ns Zielverzeichnis
   
    UrlDownloadToFile(nil, DownloadEXE, DownloadEXEZiel, 0, nil); Von --> Nach Downloaden
   
    TimerProgressbar.Enabled:= True;
  except
    Label12.Font.Color:= ClRed;
    Label12.Caption:= ('Download abgebrochen');
  end;

  BtnUpdateDownloaden.Enabled:= False; //  Button Downloaden

 IniProgrammeinstellung:= (ExtractFilePath(ParamStr(0))+ 'Einstellungen\ProgrammSettings.ini');
  begin
   with TMemIniFile.Create(IniProgrammeinstellung ) do
    try
      begin
       WriteBool(DownloadInfo,BtnUpdatInstall,True);
       WriteBool(DownloadInfo,BtnUpdateueberp ,False);
       WriteBool(DownloadInfo,BtnDownload,False);
       UpdateFile;
      end;
      finally
     Free;
    end;
  end;
  Label6.Font.Color:= ClBlack;
  Label6.Caption:= 'Nicht aktiv';
end;


//==========Textdatei auslesen mit Versionsinfo auslesen================================
procedure TUpdateForm.DownloaddateiPruefen;
Var List: TStrings;
begin
 List:= TStringList.Create;
 try
  List.LoadFromFile(ExtractFilePath(ParamStr(0))+ 'Einstellungen\System\UpdateDatei.txt');
  if List.Count>0 then
    Edit1.Text:=List[0];
    Edit2.Text:=List[1];
    Edit3.Text:=List[2];
    Edit4.Text:=List[3];
 finally
  List.Free;
 end;

 //Edit1 und Label11 sind Visble:= False dient nur im Hintergrund zur Überprüfung
 if StrToInt(Edit1.text) > StrToInt(Label11.Caption) then
  begin
   TimerProgressbar.Enabled:= True;
   Label7.Font.Color:= ClLime;
   Label7.Caption:= ('Es ist ein neues Update vorhanden!');
   BtnUpbdateDownloaden.Enabled:= True;
  end
 else
  begin
   Label7.Font.Color:= ClRed;
   Label7.Caption:= ('Sie haben das aktuellste Update!');
   BtnUpdateDownloaden.Enabled:= False;
  end;
end;


//=========download Progrssbar=================================================
procedure TUpdateForm.TimerProgressbarTimer(Sender: TObject);
begin
 Label7.Font.Color:= ClLime;
 Label7.Caption:= ('Update Download gestartet');

 Label12.Font.Color:= ClLime;
 Label12.Caption:= 'Update Download gestartet';
  ProgressBar1.Position := ProgressBar1.Position + 33;
  if ProgressBar1.Position = 99 then
    begin
      ProgressBar1.Position := 100;

      Label7.Font.Color:= ClLime;
      Label7.Caption:= ('Download erfolgreich beendet');

      Label12.Font.Color:= ClLime;
      Label12.Caption:= 'Download erfolgreich beendet';
      TimerProgressbar.Enabled := False;
      BtnUpdateInstallieren.Enabled:= True;
    end;

 IniProgrammeinstellung:= (ExtractFilePath(ParamStr(0))+ 'Einstellungen\ProgrammSettings.ini');
  begin
    with TMemIniFile.Create(IniProgrammeinstellung ) do
    try
      begin
       WriteString(ProgrammInfo,Programmversion,Edit1.Text);
       UpdateFile;
      end;
      finally
     Free;
    end;
  end;
end;

//===============Updater aufrufen===============================================
procedure TUpdateForm.Button4Click(Sender: TObject);
begin
 if Form1.MessageDlgPos2('Um das Update zu installieren wird das Programm beendet',mtInformation, [mbNo,mbYes],self) = mrYes then
  begin
    BtnUpdateInstallieren.Enabled:= False; //Button Installieren
   
    // Updater aufrufen
    if ShellExecute(Application.Handle,'open',PChar(ExtractFilePath(ParamStr(0)) +'Updater.exe'),Nil, Nil,SW_NORMAL) >= 32 then

    MainForm.Close; // Programm Schließen

    Label12.Caption:= ('Status');
    Progressbar1.Position:= 0;
  end
 else
  begin

  end;
end;

//===========für Blinken vom Label========================
procedure TUpdateForm.Timer2Timer(Sender: TObject);
begin
 Label7.Visible:= Not Label7.Visible;
 BtnUpdateDownload.Enabled:= true;
end;

//Internetverbindung Überprüfen============================
function TUpdateForm.IsInternetConectet: Boolean;
begin
if InternetGetConnectedState(nil,0) then
 begin
   Result:= True;
 end
else
 begin
   Result:= False;
 end;
end;
so bis hier hin war das die Updateüberprüfung und das Downloaden

Jetzt Kommt das Kopieren und Ersetzen des Programms, dazu wurde vorher das Hauptrogramm geschlossen und ein anderes gestartet das sich im Programmverzeichnis befindet.

Delphi-Quellcode:
private
  IniProgrammeinstellung :TFileName;
  Datei :Textfile;

public
  ServerPfad :String;
 
 Const
   ProgrammInfo = 'Programminfo';
   Programmversion = 'Programmversion';

   DownloadInfo = 'DownloadInfo';
   BtnUpdatInstall = 'Installation steht noch aus';
   BtnUpdateueberp = 'Updateüberprüfung';
   BtnDownload = 'Downloaden'; { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


//====Programm löschen und Timer für Kopie starten========
procedure TForm1.Button1Click(Sender: TObject);
begin
 DeleteFile(ExtractFilePath(ParamStr(0)) + 'Programm.exe');
 TimerUpdaten.Enabled:= True;
end;

//==Progessbar und Kopieren starten========================
procedure TForm1.TimerUpdatenTimer(Sender: TObject);
begin
 TimerKopieren.Enabled:= True; // Kopieren starten

  ProgressBar1.Position:= ProgressBar1.Position + 33;
  if ProgressBar1.Position = 99 then
    begin
      ProgressBar1.Position:= 100;
      TimerUpdaten.Enabled:= False;
    end;
end;

procedure TForm1.TimerKopierenTimer(Sender: TObject);
var NeuesUpdate,AltesUpdate :string;
     List: TStrings;
begin
  NeuesUpdate:= (ExtractFilePath(ParamStr(0)) + 'Einstellungen\System\Programm.exe');
  AltesUpdate:= (ExtractFilePath(ParamStr(0)) + 'Programm.exe');
  begin
   CopyFile(PChar(NeuesUpdate), PChar(AltesUpdate), true);
   begin
    List:= TStringList.Create;
    try
     List.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Einstellungen\System\UpdateDatei.txt');
      if List.Count > 0 then
       Edit1.Text:= List[0];
     finally
     List.Free;
    end;

    IniProgrammeinstellung:= (ExtractFilePath(ParamStr(0)) + 'Einstellungen\ProgrammSettings.ini');
     begin
      with TMemIniFile.Create(IniProgrammeinstellung) do
      try
        begin
         WriteString(ProgrammInfo,Programmversion,Edit1.Text);
         WriteBool(DownloadInfo,BtnUpdatInstall,False);
         WriteBool(DownloadInfo,BtnUpdateueberp ,True);
         WriteBool(DownloadInfo,BtnDownload,False);
         UpdateFile;
        end;
        finally
       Free;
      end;
     end;
    TimerUpdaten.Enabled:= False;
    MessageDlg('Update erfolgreich durchgeführt, Sie können das Programm jetzt wieder starten', mtInformation, [mbOK], 0);
   Close;
   end;
  end;
end;
So das war das ganze Updaten hoffe man sieht das es sehr einfach ist.
Im Anhang noch mal die Oberfläsche der Updateüberpüfung

Ich weis das mit der Progressbar könnte man noch schöner machen.

Gruß sascha

Poseidon 14. Jul 2008 08:53

Re: Einfaches Online Update
 
Klasse, du hast mir sehr geholfen :thumb:

SaFu 14. Jul 2008 09:01

Re: Einfaches Online Update
 
Bitte aber es ist nicht perfekt wie gesagt z.b. das mit der Progressbar.

Das war nur ein Beispiel für das Updaten der EXE, man kann im gleichen Zug der Updateüberprüfung die Bedienungsanleitung auch mit Updaten nur so als zusätzlichen Vorschlag.

Und bei mir im Update hat der Anwender noch viel selber zu machen (die ganzen Button drücken) das habe ich aber bewusst so gemacht.

Wenn einer noch Verbesserungsvorschläge hat bin ich gerne für Kritik offen.

DevStar 27. Jul 2008 16:29

Re: Einfaches Online Update
 
Hat jemand mal ein komplettes Beispielprojekt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 Uhr.
Seite 5 von 7   « Erste     345 67      

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-2025 by Thomas Breitkreuz