Zitat von
Ratte:
Die Datein sind also unterschiedlich, ja? Diese Unterscheidung kannst du dann mit einem
Hash lösen (z. B.
MD5).
Nein, kann ich in diesem Fall nicht
Mein "Autoupdater" ist nämlich zugleich "Launcher" meines Programms - sprich, der Anwender startet nicht das Hautprogramm direkt, sondern es wird der Launcher gestartet, dieser prüft Gleichheit von lokaler Installation zu Vorgabe auf Server und startet dann das Hauptprogramm.
Es ist aus meinem Empfinden für den Anwender unzumutbar, bei jedem Start des Programms z.B. 3 Minuten zu warten, bis alle lokalen Dateien durchgehasht wurden.
Da mein Programm modular aufgebaut ist, ist es in der Praxis chic, dass zur Neuinstallation nur der Launcher auf dem Clienten installiert sein muss. In der Datenbank auf dem Server ist hinterlegt, welches Modul welche Dateien in welcher Version benötigt und für welche Module der Anwender berechtigt ist. Loggt sich der Anwender nun in den Launcher ein, werden nur genau die Datei auf den Clienten kopiert (sofern nicht beriets in der richtigen Version vorhanden), die für diesen Anwender notwendig sind.
Löscht der Anwender aus Versehen oder bewußt eine Datei, oder verändert eine Datei, ist diese beim nächsten Programmstart wieder im Originalzustand auf dem Clienten vorhanden.
Wie gesagt benutze ich momentan folgende Informationen zur Identifikation einer Datei:
MD5(Compilationsdatum + Dateigröße)
Diese Information liegt zu jeder Datei in der Datenbank und wird mit dem ermitteltem Hash der lokalen Datei verglichen (das ist von der Performance her zumutbar).
Bei z.B. Textdateien gibt es aber kein Compilationsdatum und z.B. die Änderung eines Buchstabens in einer Textdatei würde somit nicht erkannt werden.
Gruß
Igotcha