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.
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.
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 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?
ifnot 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
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';
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;
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.
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
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...
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.
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...