ich möchte euch hier meine Patcher-Lib vorstellen.
Die Lib ermöglicht unkompliziertes und komfortables Patchen von Programmen und Dateien.
Alles was man nach einbinden der Lib braucht, ist das hier:
Code:
private void MainForm_Load(object sender, EventArgs e) { var patcher = new Patcher("http://localhost/update"); patcher.OnFetchDone += patcher_OnFetchDone; patcher.OnFetchError += patcher_OnFetchError; patcher.FetchAsync(); } private void patcher_OnFetchDone(object sender, FetchDoneEventArgs args) { var patcher = (Patcher)sender; if (patcher.UpdateAvailable) patcher.Update(); } private void patcher_OnFetchError(object sender, FetchErrorEventArgs args) { MessageBox.Show(args.Exception.ToString()); }
Code:
private void MainForm_Load(object sender, EventArgs e) { var patcher = new Patcher("http://localhost/update"); patcher.Fetch(); if (patcher.UpdateAvailable) patcher.Update(); }
Code:
<!-- ShawPatcher - Patch List --> <!-- Coded by Shawak --> <p:files/data/0cc-by-nc-540x304.jpg:b442fa400e582541a2f16217cd1a7056-13756:p> <p:files/data/0kunden_buecher.jpg:7d66e04b3889f31d343445ed94875563-92932:p> <p:files/data/1logo1-300x300.png:8dbb951e74e04d0b66fa1479b3d82693-33033:p> <p:files/data/2mindestlohn.jpg:d70ce15b1ffd5dc5c900592196025bce-35069:p> <p:files/data/kunden_buecher.jpg:7d66e04b3889f31d343445ed94875563-92932:p> <p:files/data/logo1-300x300.png:8dbb951e74e04d0b66fa1479b3d82693-33033:p> <p:files/data/mindestlohn.jpg:d70ce15b1ffd5dc5c900592196025bce-35069:p> <p:files/data/Neuer Ordner/emptyfile.txt:d41d8cd98f00b204e9800998ecf8427e-0:p> <p:files/data/Neuer Ordner/test2.txt:c454552d52d55d3ef56408742887362b-5:p> <p:files/data/test.txt:159acc62a1f0152fe834cfe52c822c1f-21:p> <p:files/data/_FTS_DriverpackageforLIFEBOOKS751Win7x64_10_1071476.ZIP:177fcdb2b31a3a1a6b3c3ac641b2361c-404722990:p> <!-- Generated in: 0.003 seconds --> <!-- Total Size: 386.29 MB (405058840 Bytes) -->
Zuerst werden alle nötigen Informationen von der Website geladen (Da diese mit einen Cache arbeitet, dauert die Abfrage meist nur wenige Millisekunden, je nach Server). Gleichzeitig wird überprüft, ob sich diese Daten ebenfalls in dem angegebenen Verzeichnis befinden. Falls nicht, kommen die Daten auf die Patchliste. Sobald alle Dateien durchlaufen werden kommt der interessante Teil.
Die Lib kopiert ihre eigene Assembly und speichert sie, mit einem zusätzlichem Starter, unter "%appdata%\ShawPatcher\~" ab. Anschließend wird dieser Starter mit der bereits abgerufenen Patchlist ausgeführt.
Nun werden alle benötigten Dateien in einen separaten Download Ordner, ebenfalls im AppData Verzeichnis, gespeichert. Sobald alle Dateien heruntergeladen wurden werden nun die Original Dateien ersetzt.
Dieses Verfahren erlaubt es ebenfalls die Patch Lib und alle im Ordner enthaltenen .exe Dateien zu patchen.
Vorteile:
+ Kann alle Exe-Dateien und sich selbst Patchen
+ Ein Abbruch des Downloads führt zu keinerlei Problemen
+ Nach einem abgebrochenen Download wird an weitergemacht wo aufgehört wurde
+ Mehrere Instanzen sind möglich, sofern anderer Host (Da temporäre Download Ordner anhand des Hosts/der Url generiert werden)
+ Schnelle Abfrage der Patchlist durch Verwendung eines Cache
+ Keine FTP Zugänge von Nöten
Nachteile:
- Auf dem Server gelöscht Dateien werden nicht Lokal gelöscht
- Dateien werden nicht gezippt
- Lib kann nicht eingebunden werden(?)
- Lib kann nicht Obfuskiert werden
How to
1) Ordner unzippen
2) update Ordner auf einen Webserver hochladen
3) Die neuste Version des Programms unter update/files Speichern.
4) Im Projekt einen Verweis auf ShawPatcher.dll erstellen
5) Oben angegebenes Beispiel in deinem Projekt einbau
6) Patchen
Bei Fragen oder Anregungen zu Verbesserungen könnt ihr natürlich hier eine Nachricht hinterlassen oder mich ggf. via privater Nachricht Kontaktieren. Bei Problemen werde ich natürlich versuchen diese Schnellstmöglich zu beheben.
Lg Shawak