Seite 1 von 1

Dateien vor Änderung/Löschen retten

Verfasst: Freitag 23. Dezember 2005, 23:44
von droptix
Kann man mit Python ein Programm für die folgende Aufgabe realisieren?

Vorzugsweise soll das erstmal nur unter Windows funktionieren, aber unter UNIX wäre das auch sehr interessant:

Das Python-Programm soll (später als Windows-NT-Dienst über srvany.exe aus dem Windows Resource Kit) vom System getätigte Dateizugriffe überwachen. Sobald das System oder ein anderes Programm Änderungen an einer Datei vornehmen möchte oder sie sogar löschen will, soll Python die Datei an eine vorher festgelegte Stelle kopieren, um bei einer Löschung die Datei "wieder herstellen" zu können oder um bei einer Änderungen nachvollziehen zu können, was genau verändert wurde.

Also einfach schnell die Datei kopieren, falls sie angerührt wird. Das kann u.U. bei sehr großen Dateien natürlich auch entsprechend lange dauern... ich weiß nicht, ob ein "dusseliges" Python-Tool durch sowas erstmal das ganze System pausieren lassen kann.

Ich könnte mir vorstellen, dass das über WMI gehen könnte. Der Sinn von WMI gibt es vielleicht her, weil WMI direkt in Systemschritte eingreifen kann. Allerdings ist das so ein komplexes Feld, dass ich da leider noch keinen Durchblick habe. Wie das bei UNIX gehen könnte weiß ich gleich gar nicht.

Hat jemand eine Idee oder sogar einen Code-Snippet für mich? Danke!

Verfasst: Samstag 24. Dezember 2005, 11:49
von jens
So viel kann ich dir nicht weiter helfen... Aber ich meine mit py2exe kann man direkt einen Windows-Dienst bauen, weiß ich aber nicht genau...

Außerdem für dich interessant:
http://www.python-forum.de/viewtopic.php?t=3620

Re: Dateien vor Änderung/Löschen retten

Verfasst: Samstag 24. Dezember 2005, 23:05
von BlackJack
droptix hat geschrieben:Also einfach schnell die Datei kopieren, falls sie angerührt wird. Das kann u.U. bei sehr großen Dateien natürlich auch entsprechend lange dauern... ich weiß nicht, ob ein "dusseliges" Python-Tool durch sowas erstmal das ganze System pausieren lassen kann.
Da wird das System in jedem Fall pausieren -- das wird sich in keiner Programmiersprache vermeiden lassen. Beim Kopieren grosser Dateien ist nicht die Programmiersprache oder der Prozessor der limitierende Faktor, sondern der Plattendurchsatz. Daten auf der Platte zu bewegen ist um Grössenordnungen langsamer als im Speicher damit zu arbeiten.

Wenn man sich tief genug ins System einwühlt, dann kann man sicher Schreibzugriffe auf die Platte abfangen und in Echtzeit ein "diff" erstellen, also nur die veränderten Daten retten und nicht die ganzen Dateien. Ist aber nicht ganz so einfach zu realisieren und mit Windows kenne ich mich nicht weiter aus.

py2exe und NT-Dienste

Verfasst: Sonntag 25. Dezember 2005, 11:25
von droptix
Also py2exe ist schon sehr geil, aber es lohnt sich eigentlich nicht, damit einen Dienst zu erstellen. Ich hatte schon zu oft Probleme damit. Python macht eigentlich fast dasselbe wie srvany.exe aus dem WinResKit. Ohne die pythonservices.exe (ähnliche Aufgabe wie srvany.exe) geht da auch nix. Einziger Vorteil: Man kann mit Parametern den Dienst installieren und deinstallieren, aber das bastel ich mir lieber selber und behalte die Kontrolle. Die pythonservices.exe musste bei mir manchmal erneut "registriert" werden, damit mein Python-Programm diese auch findet. Ohne die geht dann natürlich der ganze Python-NT-Dienste Kram nicht.

Also gehen müsste das auf jeden Fall. Ein Virenscanner oder eine Firewall können ja auch erstmal Dateiveränderungen verhindern (Zugriff blockieren). Das mit diff will ich hinterher machen. Falls die Datei mehrfach geändert wird (z.B. eine Config-Datei), muss ich mir meine einzelnen diff-Ergebnisse zusammenpuzzlen. Ich würde mir lieber die Originaldatei vor der ersten Änderung kopieren und nach der letzten Änderung vergleichen. Im Regelfall handelt es sich dabei auch um kleinere Textdateien. Wenn es allerdings doch einmal zu Änderungen in Binärdaten kommt, würde ich gerne die Ausgangslage durch zurück kopieren der Originaldatei wieder herstellen können.

Kann mir da jemand weiter helfen?