Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Patcher erstellen (https://www.delphipraxis.net/190860-delphi-patcher-erstellen.html)

xReva 15. Nov 2016 08:18

Delphi-Version: 5

Delphi Patcher erstellen
 
Hey, ich wollte ganz gerne über Delphi ein Programm schreiben das Dateien von dem PC aus mit Dateien auf einem Webserver vergleicht und gegebenenfalls die Dateien auf dem PC dann aktualisiert.

Ich habe im Forum schon mehrere Threads zu dem Thema vergleichen von Dateien gelesen bin aber noch zu keiner Lösung gekommen

Deswegen wollte ich mal selber nachfragen und gegebenenfalls eine Diskussion starten ob jemand eine Lösung für mein Problem hat.


Mfg

Neutral General 15. Nov 2016 08:24

AW: Delphi Patcher erstellen
 
Woran hängt es denn genau? So wie du die Frage formuliert hast ist sie etwas sehr offen.

xReva 15. Nov 2016 08:29

AW: Delphi Patcher erstellen
 
Oh generell weis ich nicht wirklich wo ich anfangen soll ich habe zum Großteil nur mit C programmiert und lerne jetzt für die Schule Delphi und habe mir das als Projekt vorgenommen ich weiß nur leider nicht so ganz wie ich das Umsetzen soll eine kleine Hilfe oder generell einen Code wo ich mich reinlesen und verstehen kann wäre schon sehr Hilfreich

hoika 15. Nov 2016 09:05

AW: Delphi Patcher erstellen
 
Hallo,
ich würde erst mal ohne Webserver anfangen.

geg: 2 Dateien in unterschiedlichen Verzeichnissen
ges: Diff dieser Dateien

Google "delphi compare files" liefert

http://stackoverflow.com/questions/4...of-two-tstream

2 Dateien -> 2 TFileStreams -> per Copy 2 TMemoryStreams
damit könntest du anfangen.

sh17 15. Nov 2016 09:23

AW: Delphi Patcher erstellen
 
ganz so simpel ist das nicht, binäre diffs

ein Ansatz wäre rdiff (basis von rsync), da müsstest Du evtl was lesen können als C Entwickler
Ansonsten wäre https://github.com/OctopusDeploy/Octodiff eine C#-Implementation

für Delphi ist mir nichts bekannt.

Neutral General 15. Nov 2016 09:27

AW: Delphi Patcher erstellen
 
Man muss ja theoretisch nicht gleich die Dateien auf binärer ebene vergleichen.
Ist sowieso keine so gute Idee wenn der Kram vom Webserver kommt, weil man dann entweder die alte Version hochladen muss damit der Webserver vergleichen kann oder man muss die (möglicherweise) neue Version runterladen um sie mit der alten zu vergleichen bevor man weiß ob sie tatsächlich neuer ist. Da ist es einfacher über Hashes oder sogar nur Versionsnummern zu gehen.

Der schöne Günther 15. Nov 2016 09:32

AW: Delphi Patcher erstellen
 
Wer hat denn was von binären Dingen und nur Differenzen übertragen gesagt? Er hat bislang nur "Daten" und "vergleichen" gesagt. Geht es um Text- oder Grafikdateien? Willst du einfach nur sehen ob "Datei A" gleich/ungleich "Datei B" ist"? Zum Beispiel "Wenn Datei A anders ist als das Gegenstück auf Internetserver X, dann lade sie von Internetserver X neu herunter und ersetze Datei A damit". Reicht das nicht schon?

dGeek 15. Nov 2016 09:56

AW: Delphi Patcher erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

geg: 2 Dateien in unterschiedlichen Verzeichnissen
ges: Diff dieser Dateien
Bietet sich hier nicht wunderbar ein MD5-Hash-Vergleich an?

Progman 15. Nov 2016 10:09

AW: Delphi Patcher erstellen
 
Vor Jahren hatte ich mal ein ähnliches Update-System geschrieben. Das Prinzip basierte auf der Versionsnummer und einer kleinen Exe-Datei, die das Handling übernimmt.
Beispiel:
Das aktuelle Programm auf dem PC hat die Versionsnummer 2.0.1, auf dem Server liegen Updates bis zur aktuellen Version 2.0.3.
Verwaltet wird alles durch eine zentrale Info-Datei (empfohlen XML), in der die vorhandenen Versionsnummern und Links bzw. Dateinamen der Update-Dateien zu jeder Versionsnummer eingetragen sind.
Das Update-Programm (aufgerufen durch das eigentliche Programm) auf dem PC lädt die Info-Datei, sucht seine Versionsnummer 2.0.1 und erfährt dadurch den Link zur nächsten Update-Datei auf 2.0.2. Diese Datei wird heruntergeladen und das alte, vorher geschlossene Programm damit überschrieben.
Beim nächsten Programmstart wird das wiederholt und resultiert in Version 2.0.3. Beim folgenden Programmstart wird keine höhere Versionsnummer gefunden und das Programm ist auf dem neuesten Stand.
Leider Habe ich davon keine Dateien mehr, da das noch in meiner Zeit der Berufstätigkeit war, ich aber seit 2012 Rentner bin und die ganze Software in der Firma blieb, die allerdings nicht mehr existiert.

dGeek 15. Nov 2016 10:35

AW: Delphi Patcher erstellen
 
Zitat:

Diese Datei wird heruntergeladen und das alte, vorher geschlossene Programm damit überschrieben.
Interessehalber: wie hat sich bei dir denn die kleine Exe-Datei (der Updater ansich) aktualisiert?

Progman 15. Nov 2016 10:56

AW: Delphi Patcher erstellen
 
Zitat:

Zitat von dGeek (Beitrag 1353710)
Zitat:

Diese Datei wird heruntergeladen und das alte, vorher geschlossene Programm damit überschrieben.
Interessehalber: wie hat sich bei dir denn die kleine Exe-Datei (der Updater ansich) aktualisiert?

Der wurde nicht aktualisiert. Der blieb immer gleich. Der hatte ja immer die gleichen Vorgänge abzuarbeiten und wurde vom Hauptprogramm aufgerufen. Er schaute in die Ini-Datei des Hauptprogramms, denn da stand immer die aktuelle Versionsnummer. Dann lud er die Info-Datei vom Server und schaute nach. War ein Update da, wurde das Hauptprogramm geschlossen und das Update herunter geladen (incl. dem Überschreiben der alten Versionsnummer in der Ini-Datei des Hauptprogramms). Danach wurde der Updater beendet und das Hauptprogramm wieder gestartet.
Diese Methode fand Anwendung in der damals von der Firma SAD vertriebenen Anwendung "Europa Führerschein". Da es immer mal Änderungen/Korrekturen bei Fragen, Bildern usw. gab, erwies sich diese Methode als vorteilhaft. Der kunde, der das Programm gekauft hatte, musste sich um nichts kümmern und hatte die Anwendung immer auf dem aktuellen Stand.

Ghostwalker 15. Nov 2016 14:47

AW: Delphi Patcher erstellen
 
Zurstmal (unabhängig von der Programmiersprache) würd ich mir Gedanken machen, was alles gemacht werden muss.

Mal so als Beispiel:

1. Prüfen der Internetverbindung/Verbindung zum Server (Es soll Leute geben die haben keine permanente I-Net-Verbindung)

2. Prüfen gibts was neues auf dem Server

Hier ist die Frage, wie genau du das angehen willst. Wirklich die Dateien vergleichen ? oder
über Info-Dateien ?

3. Updaten

Was muss zum Patchen runtergeladen werden ? Nur die neue Programmdatei oder auch zus. Module ?


Damit hast du schon mal nen "Master"-Plan für das Projekt.

Dann würd ich, Punkt für Punkt, erst in der Programmiersprache, die ich kann, umsetzen und dann
das ganze versuchen zu portieren (auf die andere Sprache) :)

Damit lernst du nicht nur die neue Sprache, sonder auch die Unterschiede zur bekannten Sprache,
was u.U. wieder zu neuen Ideen führt :)

Ghostwalker 15. Nov 2016 14:51

AW: Delphi Patcher erstellen
 
[OT]Oje...ich hör mich an wie "1. Vorlesung: Grundlagen der Softwareentwicklung, Raum 105 Prof. Del-Phi" [/OT]

Aviator 15. Nov 2016 15:55

AW: Delphi Patcher erstellen
 
Ein wichtiger Punkt wären evtl. noch Abhängigkeiten. Muss z.B. eine Version mit einem bestimmten Stand zuerst installiert werden bevor ein anderes Update installiert werden kann. Oder müssen Datenbankänderungen vorgenommen werden, oder oder oder ...

dGeek 15. Nov 2016 15:59

AW: Delphi Patcher erstellen
 
Zitat:

Zitat von Aviator (Beitrag 1353751)
Ein wichtiger Punkt wären evtl. noch Abhängigkeiten. Muss z.B. eine Version mit einem bestimmten Stand zuerst installiert werden bevor ein anderes Update installiert werden kann. Oder müssen Datenbankänderungen vorgenommen werden, oder oder oder ...

An den Themenersteller: wie man sieht, ist so ein Patcher nicht mit ein paar Zeilen getan.
Man muss alle möglichen Situationen in Form von Code berücksichtigen und je nach Situation handeln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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