AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Entwickeln eines Patchers / Updaters
Thema durchsuchen
Ansicht
Themen-Optionen

Entwickeln eines Patchers / Updaters

Ein Thema von Cicaro · begonnen am 12. Jan 2009 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

Entwickeln eines Patchers / Updaters

  Alt 12. Jan 2009, 19:14
Hallo,

ich möchte einen Patcher schreiben, wie solche bei Online-Spielen verwendet werden um manipulierte oder veraltete Dateien, die Teil des Spiels sind, auf den neuesten Stand zu bringen. Der Patcher soll jedes Mal vor dem Programmstart ausgeführt werden.

Dazu hab ich mir folgende Gedanken gemacht:

1) Situation:
a) Auf einer Patch-Server-Maschine liegen die aktuellsten Dateien, die überhaupt jemals gepatcht werden sollten.
b) Daneben liegt der eigentlicher Patcher patch.exe, der auf einem Client ausgeführt wird (die Datei ist möglichst klein).
c) Auf dieser Maschine läuft der Patch-Server, der zum Patchen von den Clients angesprochen werden kann.
d) Auf einem Client liegen alte Dateien, die zum Programm gehören und möglicherweise gepatcht werden müssen.
e) Gestartet wird das Programm (auf dem Client) mit der Anwendung start.exe.

2) Ausführung des Patches:
a) Wenn der Anwender also start.exe startet, verifiziert es zuerst ihre eigene Identität beim Patch-Server (durch einen Hash-Wert oder so) und lädt dann patch.exe für den Client herunter.
b) Auf dem Client wird patch.exe ausgeführt.
c) patch.exe überprüft, welche Dateien auf dem Client "veraltet" sind, lädt diese über den Patch-Server herunter und ersetzt die alten Dateien durch die neuen.
d) Nachdem der Patch-Vorgang beendet ist, wird das eigentliche Programm program.exe gestartet und der Anwender kann mit der aktuellsten Version des Programmes arbeiten.

Dass patch.exe heruntergeladen wird, dient dazu, dass keine gecrackte Version des Patchers ausgeführt wird.

3) Fragen:
a) Ist das eine gute Vorgehensweise ? Oder gibt es noch eine Lücke, die ohne zu viel Aufwand behoben werden kann ? Oder ist etwas überflüssig ?
b) Wie überprüfe ich am besten die richtige Identität von start.exe auf dem Client ?
c) Wichtig !!! Wie kann ich überprüfen, welche Dateien auf dem Client veraltet sind ? Selbe vorgehensweise wie bei start.exe ?
d) (Hat eigentlich noch keine Priorität) Wie kann ich verhindern, dass program.exe vom Anwender einfach ohne Patchen gestartet wird ?
e) Ist das Herunterladen von patch.exe in Ordnung oder ist das ein zu großes Risiko für den Client ?

(Bestimmt gibt es zu einzelnen Fragen bereits Lösungen im Forum (die ich nicht finden konnte), aber mir ist der Gesamtvorgang wichtig und ich wollte alles hier für mich und für andere auf einem Blick haben.)

Ich verlange keine vollständige Lösung. Hilfe an einzelnen Punkten wäre nett.
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Entwickeln eines Patchers

  Alt 12. Jan 2009, 19:17
Warum Patcher? Mach doch eine Versionskontrolle und nimm ein Updater..da gibt es genug..ob WEB..etc. ich hab sowas in der SWV(Softwareverteilung) mit Erfolg häufig genutzt.
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Entwickeln eines Patchers

  Alt 12. Jan 2009, 19:22
Ich vermute er verwendet die Begriffe synonym
Markus Kinzler
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#4

Re: Entwickeln eines Patchers

  Alt 12. Jan 2009, 19:30
Zur ganzen 2) und 3b), da es die Diskussion hier jetzt in letzter Zeit schon öfter gab, ich denke es ist nicht machbar, ohne das es manipuliert werden kann. Der Hash den der Server will, lässt sich mitsniffen, ist er dynamisch ist irgendwo im Original die Formel wie er generiert wird. Selbst falls das nicht gelingt, lässt sich einfach die richtige Antwort vom Server simulieren oder die Überprüfung so cracken, dass sie immer als richtig erkannt wird. Als wirkliche Integritätsprüfung wird das Ganze also nicht taugen, einen nützlichen Updater, kann man natürlich dennoch schreiben.
So ich überlass jetzt den üblichen Argumenten das Feld.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Entwickeln eines Patchers

  Alt 12. Jan 2009, 19:40
Und was machst du wenn der User keine Adminrechte hat?
Dann verschiebt Vista die geänderten Datei in die Virtualisierung.
Dann wird es interessant, da verschiedene User verschiedene Programmstände auf dem Computer haben.
Natürlich vorausgesetzt das du kein passendes Manifest hast.

Das UAC was aufgeht würde mich auch jedesmal nerven..
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Entwickeln eines Patchers

  Alt 12. Jan 2009, 20:12
Zitat von generic:
Und was machst du wenn der User keine Adminrechte hat?
Dann verschiebt Vista die geänderten Datei in die Virtualisierung.
Dann wird es interessant, da verschiedene User verschiedene Programmstände auf dem Computer haben.
Natürlich vorausgesetzt das du kein passendes Manifest hast.

Das UAC was aufgeht würde mich auch jedesmal nerven..

Fuer die Updatefunktion wird ein User angelegt mit Admin-Rechten ..per Wake On Lan bzw. bei Login wird im Hintergrund geprueft, ob die Version stimmt und ggf. aktualisiert.
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#7

Re: Entwickeln eines Patchers

  Alt 13. Jan 2009, 11:03
Zitat von generic:
Und was machst du wenn der User keine Adminrechte hat?
Dann verschiebt Vista die geänderten Datei in die Virtualisierung.
Dann wird es interessant, da verschiedene User verschiedene Programmstände auf dem Computer haben.
Natürlich vorausgesetzt das du kein passendes Manifest hast.

Das UAC was aufgeht würde mich auch jedesmal nerven..
Wie es unter Vista sein wird, kümmere ich mich später drum (ich teste es bis es funktioniert unter Windows XP). Mir ist zunächst wichtig einen relativ gut arbeitenden Patcher/Updater zu schreiben.
Und wie gesagt hat das Prüfen der Dateien auf Veralterung hohe Priorität. Die eigentliche exe des Programms soll relativ klein und dafür die RTP unbestimmt groß sein (bis zu mehreren Tausend Dateien, die wiederum auch ein paar MB groß sein könnten). Da ist wohl eine schnelle Hash-Funktion oder gute Methode zur Überprüfung der Dateien von nöten.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Entwickeln eines Patchers / Updaters

  Alt 13. Jan 2009, 12:29
Wenn du da eine .Net Anwendung hast, kannst du "One Click Installs" nutzen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
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
Antwort Antwort


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 22:20 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