AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Einfaches Online Update
Tutorial durchsuchen
Ansicht
Themen-Optionen

Einfaches Online Update

Ein Tutorial von Larsi · begonnen am 29. Jan 2008 · letzter Beitrag vom 28. Feb 2009
Antwort Antwort
Seite 6 von 7   « Erste     456 7      
Larsi
Registriert seit: 10. Feb 2007
Hi,
bitte nicht so hart mit mir sein, denn das ist mein erster Beitrag für die Code-Lib!
Mithilfe dieser Anleitung ist es möglich ein kleines aber feines Online- Update zu realisieren!
Der Grundgedanke ist, dass man eine Textdatei auf einem Server downloadet, diese ausliest und dann prüft ob ein Update notwendig ist und gegebenfalls downloaden!
Dies sollte in gut einer halben Stunde zu schaffen sein. Kein wirklich großer Aufstand, da eine Update- Funktion ja gar nicht so schwer sein muss
Anleitung:
Zuerst downloadet man sich ja die Textdatei:
Delphi-Quellcode:
uses
  URLMon;

procedure TForm1.Button1Click(Sender: TObject);
var
  Datei,Ziel:PChar;
begin
  try
    Datei := 'http://www.DieSeite/DieDatei.txr';
    Ziel := 'C:\Windows\Desktop\DieDatei.txt';
    UrlDownloadToFile(nil, Datei, Ziel, 0, nil);
     
  except
ShowMessage('Ein Fehler ist aufgetreten! Programm wird beendet!');
Form1.Close;
  end;
end;
end;
Dies kann man entweder so wie gerade beschrieben oder halt über die Indys tun!
Bei "Datei" die Textdatei auf deinem Server eintragen, bei "Ziel" das Ziel^^
Ich würde euch empfehlen, die Datei im Ordner deiner Anwendung zu downloaden. Und vergesst nicht, sie am Schluss wieder zu löschen, den sonst entsteht Datenmüll:
DeleteFile('Pfad der Textdatei.txt'); Die Textdatei würde ich wie folgt aufbauen: GANZ WICHTIG: Die Beschrieung darf nur eine Zeile in Anspruch nehmen, da wir ja gleich die einzelnen Zeilen auslesen, aber auch eine Zeile kann ja ziemlich viele Buchstaben enthalten...!
Zur Erklärung:
1. Zeile := Die Version ohne einen Punkt in der Mitte damit man Sie mit < bzw. > dann später vergleichen kann
2. Zeile := Die Version so, wie Sie der User dann sehen wird um dann zu entscheiden ob er ein Update will oder nicht
3. Zeile := Die Datei, die gedownloadet werden soll
4. Zeile := Die Beschreibung warum ein Update gemacht werden soll bzw. die Update- Erneuerungen

Dann noch in eurem Programm die Textdatei öffnen:
Delphi-Quellcode:
var
List: TStrings;
begin
List := TStringList.Create;
try
  List.LoadFromFile('C:\UpdateDatei.txt');
  if List.Count>0 then
    Edit1.Text:=List[0];
finally
  List.Free;
end;
end;
Das Edit1.text := List[0] list die erste Zeile aus wenn ihr da [1] reinschreibst halt die 2. Zeile und immer so weiter.

Wenn ihr das so für alle vier Zeilen gemacht hast, steht im ersten Edit die Version im 2. Edit die Version mi nem Punkt in der Mitte zur Übersicht und so weiter...
Dann könnt ihr ja ein Label auf euer Form ziehen in dem z.B.: 31(für Version 3.1) drinnen steht und das vergleichst du dann mit Edit1.text:
Die Überprüfung ob ein Update von Nöten ist (in diesem Fall nämlich nicht!):
Delphi-Quellcode:
if StrToInt(Edit1.text) > StrToInt(Label1.caption) then
ShowMessage('Es ist ein Update möglich!')
else
ShowMessage('Es ist kein Update nötig! Die Software ist auf dem neusten Stand'!);

Wenn ein Update möglich ist dann macht ihr wieder die Download Procedur mit dem Link aus deiner gedownloadeten Textdatei!
Was ich euch noch empfehlen kann ist ein Vorschau- Fenster wo noch Beschreibung und so drinnen steht:
Gehen wir mal davon aus, das das Vorschau Form den Namen Form2 trägt und sich auf diesem ein paar Labels und ein Memo- Feld befinden, dann müsste man ja nurnoch mit der Textfeld- Laden Procedur die einzelnen Zeilen auslesen und Fertig! Das mit dem Memo würde ich empfehlen für die Beschreibung, da diese in einem einzigen Label wohl kaum Platz finden könnte!
Außerdem sollte die alte Version des Programmes dann selbst gelöscht werden nach Nachfrage!
Auch eine ProgressBar für dein Fortschritt kann man einbauen, ist aber bei kleineren Dateien sinnlos:
Dafür wurde von BullsEye ein Thread aufgemacht, der euch bestimmt weiterhelfen kann.


Solltest ihr noch Fragen haben, stellt sie einfach!
Hoffe ich konnte euch damit helfen!

Falls Ihr euch das Update und so mal angucken wollt, dann downloadet doch einfach meinen Passwort Saver, denn dort ist GENAUS DAS VERFAHREN drinnen!
MFG Lars Wiltfang

[edit=Matze]Dieses Thema reicht nicht ganz aus, um in die Code-Library aufgenommen zu werden. MfG, Matze[/edit]
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
 
Jeff93

 
Turbo Delphi für Win32
 
#51
  Alt 27. Jul 2008, 18:29
Habe mein Problem in ein eigenes Thema gesteckt. Siehe Hier
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

 
Delphi 10.3 Rio
 
#52
  Alt 28. Jul 2008, 08:28
So hab mal ein BspProjekt angehängt.

Habe es nicht getestet und Kompalieren musst du es dir auch selber, habe es nicht gemacht da die Pfade zu deiner Url angepast werden müssen sowie der Programmname (.exe) aber sollte eigentlich laufen.

Das Programm das dein Update in dein Programmverzeichnis KOPIERT (vorher löschen) musst du dir selber schreiben.

Hoffe es hielft dir weiter.

zu meinem Post der oben steht habe ich noch verbesserungen eingebaut, da es mit dieser blöden Textdatei Probleme gab unter VISTA.
Hab es jetzt auf INI's umgestellt somit werden die Werte korekt angezeigt.

Bei diesem Update wird jetzt auch direkt die Programmversion verglichen, besser gesagt die Updateversion die in der ini steht mit der des aktuellen Programms.

Eine Bsp ini die auf den FTP Server muss ist auch im Anhang

Viel spass damit.
Angehängte Dateien
Dateityp: ini update_993.ini (100 Bytes, 41x aufgerufen)
Dateityp: zip updatebsp_141.zip (22,9 KB, 39x aufgerufen)
  Mit Zitat antworten Zitat
AlexanderBrade

 
Delphi 2005 Personal
 
#53
  Alt 28. Feb 2009, 10:23
Hallo Lars, ich habe deine Prozeduren nach Anleitung in mein Projekt integriert, allerdings lädt er bei mir die Datei garnicht herunter!

Anbei mein Quelltext(ich habe das in das FormCreate des 1. Formulars integriert)

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Datei,Ziel:PChar;
    List: TStrings;

begin
  try
    Datei := 'http://alexanderbrade.al.funpic.de/abi/version.txt';
    Ziel := 'C:\';
    UrlDownloadToFile(nil, Datei, Ziel, 0, nil);

  except
ShowMessage('Ein Fehler ist aufgetreten! Programm wird beendet!');
Form1.Close;
  end;

 List := TStringList.Create;
try
  List.LoadFromFile('C:\version.txt');
  if List.Count>0 then
    Edit1.Text:=List[0];
    Edit2.Text:=List[1];
finally
  List.Free;
end;

if StrToInt(Edit1.text) > StrToInt(Label1.caption) then begin
ShowMessage('Es ist ein Update möglich!');
try
    Datei := 'http://alexanderbrade.al.funpic.de/abi/abi.zip';
    Ziel := 'C:\';
    UrlDownloadToFile(nil, Datei, Ziel, 0, nil);

  except
ShowMessage('Ein Fehler ist aufgetreten! Programm wird beendet!');
Form1.Close;
  end; end



else
ShowMessage('Es ist kein Update nötig! Die Software ist auf dem neusten Stand!');

{DeleteFile('C:\version.txt'); }

end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

 
Delphi 11 Alexandria
 
#54
  Alt 28. Feb 2009, 10:39
Muss unter Ziel nicht ein Dateiname angegeben werden?
Detlef
  Mit Zitat antworten Zitat
AlexanderBrade

 
Delphi 2005 Personal
 
#55
  Alt 28. Feb 2009, 10:43
Ja OK das klappt! Danke.
  Mit Zitat antworten Zitat
Larsi

 
Delphi 2007 Professional
 
#56
  Alt 28. Feb 2009, 10:43
Zitat von DeddyH:
Muss unter Ziel nicht ein Dateiname angegeben werden?
Genau richtig
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

 
Delphi 11 Alexandria
 
#57
  Alt 28. Feb 2009, 10:48
Zitat von AlexanderBrade:
Ja OK das klappt! Danke.
Aber auch nur bei dir...
Unter Vista oder bei einem gut eingerichteten XP wirst du dort keine Schreibrechte haben unter c:\, weshalb du da das Verzeichnis für temporäre Dateien benutzen musst. Das bekommst du mit GetTempPath.

Bei der Aktualisierung selbst brauchst du dann Administratorrechte. Eine Möglichkeit wäre, die eigene Exe mit Administratorrechten und einem speziellen Parameter selbst erneut zu starten. Diese neue Instanz benennt sich dann selbst um, kopiert die neue Exe ins Verzeichnis, löscht die Daten im Tempverzeichnis und startet wiederum die neue Exe mit einem Parameter zum Löschen der alten umbenannten Exe. Dies wird dann gemacht, und schon ist dein Programm aktualisiert.
Sebastian Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

 
Delphi 11 Alexandria
 
#58
  Alt 28. Feb 2009, 10:49
Abgesehen davon ist es auch möglich, dass es gar kein Laufwerk C gibt
Detlef
  Mit Zitat antworten Zitat
AlexanderBrade

 
Delphi 2005 Personal
 
#59
  Alt 28. Feb 2009, 11:13
Aber für "Ziel" kann ich nur einen absloten Pfad verwenden, da er sonst sagt: inkompatible Typen: PAnsiCHar und string;

Vielleicht könnte ich dem Ziel ja den Pfad aus einem SavetoFIle Dialog zuordnen!
  Mit Zitat antworten Zitat
Larsi

 
Delphi 2007 Professional
 
#60
  Alt 28. Feb 2009, 11:17
Dann musst du Pchar() nehmen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 7   « Erste     456 7      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 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