![]() |
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. |
Re: Einfaches Online Update
Zitat:
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: |
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. |
Re: Einfaches Online Update
Du meinst das die alte Datei gelöscht wird und die neue startet?
|
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.
|
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?
|
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:
so bis hier hin war das die Updateüberprüfung und das Downloaden
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; 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:
So das war das ganze Updaten hoffe man sieht das es sehr einfach ist.
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; 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 |
Re: Einfaches Online Update
Klasse, du hast mir sehr geholfen :thumb:
|
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. |
Re: Einfaches Online Update
Hat jemand mal ein komplettes Beispielprojekt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 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-2025 by Thomas Breitkreuz