Wechseln Sie automatisch zahlreiche oder große Dateien in den Papierkorb

2435
minameismud

Ich wurde beauftragt, ein Herstellerprogramm zu reparieren, das unter bestimmten Umständen Gigs von Junk-Dateien in ein Protokollverzeichnis ablegt. Es endet damit, die Maschinen der Benutzer zu füllen. Meine Aufgabe ist es, herauszufinden, wie das Programm ohne Quellcode oder zusätzliche laufende Prozesse angehalten werden kann und ohne dass das Programm kasplode ist. Mit anderen Worten, ich möchte eine Funktion des Dateisystems verwenden, um das Wachstum zu kontrollieren.

Eine Idee, die ich hatte, war, eine feste Verbindung von diesem Ordner zu NUL herzustellen, wie Sie es vielleicht /dev/nullin der Linux-Welt tun. Meine Versuche, das mklinkProgramm zum Erstellen einer Junction zu verwenden, führen jedoch zu einer Meldung, die besagt, dass dies der Fall istLocal volumes are required to complete the operation.

Irgendwelche Ideen, wie Sie die Kreuzung abschließen können, oder andere Ideen, um das Problem zu lösen?

7
aus neugier: wozu brauchst du das? akira vor 13 Jahren 0
Symlinks sind _nicht_ die gleichen wie Shell-Verknüpfungen. Hüten Sie sich vor der Terminologie. (FWIW, in der Unix-Welt ist ein Hardlink auf `/ dev / null` ein seltener Anblick; Symlinks sind viel häufiger.) grawity vor 13 Jahren 0
Weitere Informationen (wenn auch nicht so viel) zu "NUL" für Windows: http://msdn.microsoft.com/en-us/library/aa939249.aspx Gnoupi vor 13 Jahren 0
Ich wurde beauftragt, ein Herstellerprogramm zu reparieren, das unter bestimmten Umständen Gigs von Junk-Dateien in ein Protokollverzeichnis ablegt. Es endet damit, die Maschinen der Benutzer zu füllen. Meine Aufgabe ist es herauszufinden, wie man es ohne Quellcode und ohne kasplode machen kann. minameismud vor 13 Jahren 0
Stürzt das Programm Ihres Herstellers ab, wenn Sie die Berechtigungsstufe ändern, um den Schreibzugriff auf den Ordner zu verweigern, in dem die Junk-Dateien gespeichert sind? Usta vor 11 Jahren 2
Wenn Sie sich die Frage ansehen (Lokale Volumes sind erforderlich, um die Operation abzuschließen.), scheint es, dass das Programm nicht funktioniert, wenn Sie nicht zulassen, dass Protokolldateien geschrieben werden. Ist es so? teste es einfach ... tumchaaditya vor 11 Jahren 0

7 Antworten auf die Frage

1
SecurityMatt

Hardlinks sind nur innerhalb von NTFS verfügbar, und die NUL-Datei ist keine NTFS-Datei. Dies ist der WIN32-Name des Namespaceobjekts \. \ Devices \ NULL, es kann jedoch kein Hardlink erstellt werden.

Sie könnten einen Softlink (eine Verknüpfung) zur NUL-Datei erstellen, wenn Sie wollten, aber ich kann mir nicht wirklich vorstellen, warum das eine gute Idee wäre.

1
micnolmad

Ich bin hier nur Spucke Ideen, aber:

Wenn das Problemprogramm Befehlszeilenschalter hat, kann es möglicherweise ausgeschaltet werden. Ich würde den Verkäufer zuerst fragen, vorausgesetzt, Sie können und nicht.

Wenn das Herstellerprogramm eine Art Systemereignis ausführt, das von Windows gelesen wird, können Sie möglicherweise ein Skript erstellen, das den Junk-Ordner löscht (batch, cmd oder powershell). Wenn dies möglich ist, vergessen Sie nicht zu warten, bis das Herstellerprogramm mit dem Dumping fertig ist.

Letzter Ausweg ist das Einrichten einer geplanten Aufgabe zum Löschen bei der Windows-Abmeldung. Dies erfordert, dass die Client-Computer über ausreichend Platz verfügen, damit der Müll für die Dauer der Sitzung leben kann.

Wenn es sich bei den Clients um Server handelt, müssen Sie sie nicht abmelden. Legen Sie fest, dass sie ausgeführt werden soll, beispielsweise alle 24 Stunden oder wie oft dies durch 2 geteilt wird. Division durch 2 bedeutet, die Wahrscheinlichkeit von Doppelmüll sozusagen zu reduzieren.

1
AlwaysLearning

Wenn Sie das Programm überreden können, seine Protokolldateien in das Stammverzeichnis eines Laufwerkbuchstabens zu schreiben, sagen Sie "T:", versuchen Sie es

subst T: NUL: 

weil dann die Umleitung zum Bit-Bucket funktioniert, zB solche Dinge funktionieren:

echo > T:\some_file 

Was nicht funktioniert, sind Lesezugriffe auf das gefälschte T: Laufwerk, Ordnererstellung und Dateizugriff. Was für eine Sorte Sinn macht, aber vielleicht ist Ihre App darauf angewiesen.

0
jimminycricket

Warum schreiben Sie nicht einfach ein Skript, das alle .log-Dateien entfernt, die regelmäßig (oder am Anfang / Ende der Verwendung des Programms) in das fehlerhafte Verzeichnis geschrieben werden? Zugegeben, es ist eine Bandhilfe, bis Sie das Unternehmen dazu bringen können, ihr Programm zu reparieren.

Sowie:

do {} While (Get-ChildItem C:\problemfile).Count = 0) Remove-Item "c:\problemfile\*.log" Write-Host “Program log file cleaned successfully” 

Ich bin ganz neu bei PoSH, daher funktioniert dieses Skript möglicherweise nicht, aber ich denke, das Konzept ist solide.

Oder die eher kompatible und wohl einfachere Sache im Stapel: `del \ *.`. Vielleicht möchten Sie zuerst ein unbrauchbares Verzeichnis testen. Bob vor 12 Jahren 1
0
mogga

If you don't need the offending log file and the path/name is a known variable, try creating it as a read only file as root/privileged user to prevent it's creation.

Alternatively you could create a read only volume/partition or ramdisk of a limited size that you symlink to, to limit the size of the file.

If the program does require the log file to continue operation and 'kasplodes' when it can't write then you may need a programmatic solution such as log rotations if you've been unable to pipe to null.

0
Justin Buser

Sie können einen separaten Windows-Benutzer erstellen, um das Programm auszuführen (muss ein kennwortgeschütztes Konto sein). Klicken Sie dann mit der rechten Maustaste auf das Laufwerk, in das die Protokolle geschrieben werden, und wählen Sie Eigenschaften aus. Klicken Sie dann auf die Registerkarte "Kontingent" und richten Sie ein Festplattenkontingent für diesen Benutzer ein. Halten Sie die Umschalttaste gedrückt und klicken Sie mit der rechten Maustaste auf die EXE-Datei, mit der das Programm gestartet wird, und wählen Sie Als anderen Benutzer ausführen aus.

-1
dag729

Wenn Sie den Hard Link bevorzugen, müssen Sie mitgehen

C:> mklink / h "C: \ Programme \ MyNewHardlinkFolder" NUL

Ich bezweifle, dass das funktionieren würde. `NUL` ist keine echte Datei und hat keine Links. grawity vor 13 Jahren 0
Nicht Msgstr "Lokale NTFS - Volumes sind erforderlich, um den Vorgang abzuschließen." minameismud vor 13 Jahren 0