Einzelnen Beitrag anzeigen

polarwolf

Registriert seit: 6. Jan 2008
Ort: Bei Hamburg
10 Beiträge
 
Delphi 7 Personal
 
#9

Re: Entwickeln eines Patchers / Updaters

  Alt 13. Jan 2009, 20:22
Ich hoffe ich helfe mit meinem Post ein wenig auf die Sprünge. Vorausgesetzt man will einen externen Updater programm.
Ich habe mir ein Projekt ausgedacht (ein kleine Datenbank) um programmieren zu lehrnen und stand vor einigen Problemen.

Probleme die aufgetreten sind:
Wo lagere ich meine Daten (neueste Version des Clients, Daten der Datenbank mit Bilder).?
Lösung: Ich habe meinen Hauspc in einen Webserver verwandelt und jetzt liegen alle Immer griffbereit auf meinen PC.
Die Bandbreite meines Uploads ist extrem klein (Daher dürfen die Patches / Updates sich nur auf das wesentliche beschränken) aber sonst war es kein großes Problem den Server (Apache) heruntergeladen. Und eine kostenlose Dns-Adresse besorgen.
(Wer wissen will wo kann ruhig PN schreiben bin allerdings nicht oft im Forum)

Wenn mein Server ausgeschaltet ist, muss die Datenbank in Offline Modus gehen.
Suche nach der Versionsverzeichnis über DNS adresse und fange dabei die Fehler ab.

Delphi-Quellcode:
  Servervorhanden:=true;
  try
    // Versuche über die Versionsdatei mit Indy oder vergleichbar herunterzuladen.
  except
    on e: Exception do //wenn es nicht funktioniert landen wir mit Error Hier
    begin
      Servervorhanden:=false;
    end;
  end;
Nun ist die Versionsdatei beim User und wird verglichen. Ich habe es mir einfach gemacht mit Tinifile problem mit win 98 muss man es anders machen wegen der größenbegrenzung. Sieht ungefär so aus; natürlich kann man sie kleiner machen indem man kurze namen verwendet.

Delphi-Quellcode:
[Algemein]
Anzahlfile=174
Updaterversion=17
[1]
Name=Datenbankclient.exe
Version=74
[2]
Name=GesamteTabelle.ini
Version=68
[3]
Name=....usw etc
in meiner ersten Version hatte ich beim programmieren des Updaters ein paar Fehler gemacht und musste bei nen freund den Updater auf einen neu Stand bringen.
Also nicht vergessen bei externen Updatern sollte man immer so flexibel bleiben das man ihn nachher auch mal ersetzen kann. Also auch gleichen und bei bedarf laden.
Genau so wie ich den Updater abgleiche mache ich es Später mit denn einelnen Einträgen auch.
Allerdings lade ich nur den Client über den Updater (kommt natürlich auf den eigenen Wunsch an), die Datenbank ist wärend sie heruntergeladen wird, bereits zum be/verarbeitet bereit bei mir.

Delphi-Quellcode:
// Überprüfe die Version des Updaters
  try
    öffne alte Version.ini und neue Version.ini
    vergleiche ('Algemein','Updater',0);
    if alteZahl <> neueZahl then
    begin
      //Lade Updater herunter und schreibe nach erfolgreichen laden neue Zahl in die Versionsdatei
    end;
    //vergleiche dann die Version des Clienten (wenn nötig starte den Updater und schließe die Datenbank)
    //wenn nicht unterschiedlich beginnen mit der Kontrollschleife
    // eintrag 2 bis Anzahlfile und vergleiche die (natürlich runterladen wenn unterschieldliche Version)
  finally
    //Freigeben etc.
  end;
Versionsdatei ist vorhanden eine funktionierenter Updater auch. Updater wird gestartet und nun geschah es eine endlosschleife entstand. Eine gesperrte Datei kann man nicht überschreiben.
ein einfacher Timer und Mutex kann Wunder bewirken und verhindern auch das die Datenbank doppelt gestartet wird.

Ich hoffe es waren Anregungen genug was man auserdem beachten sollte. Rechtschreibfehler dürfen gesammelt und behalten werden.
mfG polarwolf
Martin
  Mit Zitat antworten Zitat