Finden Sie heraus, welcher Prozess eine Datei ohne Tools von Drittanbietern gesperrt hat

Wenn Sie versuchen, eine Datei oder einen Ordner zu löschen, die bzw. der von einem Prozess verwendet wird, wird das Dialogfeld "Verwendete Datei" mit dem Namen des Programms angezeigt, das die Datei gesperrt hat.

Es gibt jedoch Fälle, in denen im Dialogfeld "Verwendete Datei" nicht der Name des Prozesses angezeigt wird, bei dem die zu löschende Datei gesperrt ist. In einigen Fällen wird im Dialogfeld angezeigt, dass die Aktion nicht abgeschlossen werden kann, da die Datei in einem anderen Prozess geöffnet ist.

Für die Untersuchung von Prozessen und gesperrten Dateien ist Windows Sysinternals Process Explorer wahrscheinlich die erste Option, die den meisten Benutzern in den Sinn kommt. Es gibt jedoch zwei integrierte Lösungen, um die Liste der aktuell geöffneten Dateien zusammen mit den entsprechenden Prozessnamen anzuzeigen.

$config[ads_text6] not found

1. Ressourcenmonitor

Der Ressourcenmonitor (resmon.exe) ist ein integriertes Tool mit vielen nützlichen Funktionen. Mit Resource Monitor können Sie die aktuelle Netzwerk- und Internetnutzung verfolgen, zugehörige Handles für gesperrte Dateien anzeigen und Prozesse so verwalten, wie Sie es mit dem Task-Manager tun würden.

Um den Prozessnamen zu finden, für den eine Datei gesperrt ist, klicken Sie auf die Registerkarte CPU, geben Sie den Dateinamen oder einen Teil davon in das Textfeld Zugehörige Handles ein.

Wir haben den Ressourcenmonitor bereits früher behandelt. Schauen Sie sich diese Artikel an:

  • Wie kann ich mithilfe des Ressourcenmonitors ermitteln, welcher Prozess eine Datei gesperrt hat?
  • Welches Programm nutzt Ihre gesamte Internetbandbreite? Verwenden Sie den Ressourcenmonitor, um ihn zu finden

2. Prozess-Explorer

Process Explorer benötigt keine Einführung. Im Prozess-Explorer müssen Sie lediglich die Suchfunktion verwenden und den Dateinamen eingeben. Dies zeigt den Prozess, der auf die Datei zugreift.

In der unteren Fensteransicht können Sie das Dateihandle bei Bedarf schließen.

Sie müssen Process Explorer als Administrator ausführen, um Prozesse zu verwalten, die mit erhöhten Rechten ausgeführt werden. Klicken Sie zum Erhöhen des Prozess-Explorers auf das Menü Datei → Details für alle Prozesse anzeigen .

Lesen Sie die folgenden Artikel zu Process Explorer:

  • Wie lösche ich eine hartnäckige nicht löschbare Datei oder einen Ordner in Windows?
  • Finden Sie heraus, welches Programm derzeit Ihre Webcam verwendet
  • Wie finde ich heraus, welches Programm eine unbekannte Fehlermeldung verursacht hat?
  • Was bedeutet es, Objekte im Container nicht aufzulisten?

3. Handle von Windows Sysinternals

Handle ist ein Dienstprogramm von Microsoft Sysinternals, das Informationen zu offenen Handles für jeden Prozess im System anzeigt. Sie können es verwenden, um die Programme anzuzeigen, für die eine Datei geöffnet ist, oder um die Objekttypen und Namen aller Handles eines Programms anzuzeigen. Handle ist wie eine Befehlszeilenversion von Process Explorer.

Hinweis: Handle v4.21 hat einen kleinen Fehler, bei dem immer "Keine passenden Handles gefunden" gemeldet wird, wenn der Laufwerksbuchstabe in Großbuchstaben geschrieben ist. Hoffe, Microsoft behebt es im nächsten Update.

Verwenden Sie in einem Eingabeaufforderungsfenster für Administratoren die Befehlszeilensyntax, um den Prozess zu finden, bei dem die Datei geöffnet ist:

 handle.exe -a -u Dateiname_mit_Pfad 

Wenn der Dateiname Leerzeichen enthält, schließen Sie ihn in doppelte Anführungszeichen ein.

Beispiel:

 handle.exe -a -u "c: \ users \ ramesh \ desktop \ Mandate-form.pdf" 

(Das Erwähnen des Dateinamens ohne Pfad funktioniert möglicherweise nicht in jeder Situation. Es ist ratsam, immer den vollständigen Pfad anzugeben.)

Die Ausgabe zeigt den Prozessnamen, die Prozesskennung, den Benutzernamen und den Namen der gesperrten (Ziel-) Datei mit Pfad.

Sysinternals Handle: Befehlszeilenargumente

 Verwendung: handle [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [Name] [-nobanner] 
-einAlle Handle-Informationen sichern.
-lZeigen Sie einfach die mit Seitendateien gesicherten Abschnittsgriffe an.
-cSchließt das angegebene Handle (interpretiert als Hexadezimalzahl).

Sie müssen den Prozess anhand seiner PID angeben. WARNUNG: Das Schließen von Handles kann zu Instabilität der Anwendung oder des Systems führen.

-yFordern Sie keine Bestätigung für das Schließen des Handles an.
-sDrucken Sie die Anzahl der geöffneten Grifftypen.
-uZeigen Sie den Benutzernamen des Besitzers an, wenn Sie nach Handles suchen.
-pDump-Handles, die zum Prozess gehören (Teilname akzeptiert).
NameSuchen Sie nach Handles für Objekte mit (Fragment akzeptiert).
-nobannerZeigen Sie das Startbanner und die Copyright-Meldung nicht an.
$config[ads_text6] not found

Keine Argumente geben alle Dateiverweise aus.

Fügen Sie Sysinternals Handle zum Kontextmenü hinzu

Sie können Sysinternals Handle zum Kontextmenü für Dateien hinzufügen, um schnell das Programm zu finden, das die Datei gesperrt hat. Gehen Sie folgendermaßen vor, um es dem Kontextmenü hinzuzufügen:

  1. Laden Sie Handle von der Microsoft Sysinternals-Website herunter.
  2. Kopieren Sie die Dateien handle.exe & handle64.exe in einen Ordner, z. B. d:\tools
  3. Kopieren Sie die folgenden Codezeilen in Notepad und speichern Sie die Datei als find_handle.vbs an einem dauerhaften Speicherort.
     'Führt das Dienstprogramm Sysinternals Handle.exe mit dem Argument Dateiname aus. '© Ramesh Srinivasan - //winhelponline.com/blog' Erstellungsdatum: 29. März 2008 'Aktualisierungsdatum: 11. Juni 2019' Für alle Windows-Versionen, einschließlich Windows 10 Option Explicit Dim objShell, WshShell, objFSO, sBaseKey, sFilename Set objShell = CreateObject ("Shell.Application") Set WshShell = CreateObject ("WScript.Shell") Set objFSO = CreateObject ("Scripting.FileSystemObject") Wenn WScript.Arguments.Count = 0 Dann sBaseKey = "HKCU \ Software \ Klassen \ * \ shell \ "WshShell.RegWrite sBaseKey &" FindHandle \ ", " Find Handle ", " REG_SZ "WshShell.RegWrite sBaseKey &" FindHandle \ command \ ", " wscript.exe "&" "" & _ WScript .ScriptFullName & "" "&" "&" "" & "% 1" & "" ", " REG_SZ "Sonst wenn objFSO.FileExists (WScript.Arguments (0)) = True Dann sFilename = lcase (WScript) .Arguments (0)) objShell.ShellExecute "cmd.exe", "/kd:\tools\handle.exe -a -u" & _ "" "& sFilename &" "", "", "runas", 1 End If End If 

    Hinweis: Der Pfad Sysinternals Handle.exe ist im obigen Skript fest als d:\tools\handle.exe codiert. Wenn sich das Programm auf einem anderen Pfad befindet, ändern Sie den Pfad im Skript entsprechend. Für 64-Bit-Windows können Sie entweder handle.exe oder handle64.exe verwenden

  4. Doppelklicken Sie auf find_handle.vbs, um den Kontextmenüeintrag in der Registrierung hinzuzufügen. Sie müssen dies nur einmal tun. Wenn Sie das Skript jedoch in einen anderen Ordner verschieben, müssen Sie erneut darauf doppelklicken, um den Pfad in der Registrierung zu aktualisieren.
  5. Wenn Sie mit der rechten Maustaste auf eine Datei klicken, wird die Option " Handle suchen" angezeigt . Wenn Sie darauf klicken, wird das Skript gestartet, das wiederum handle.exe mit dem Argument filename ausführt, um den Prozess zu finden, bei dem die Datei gesperrt ist.

Starten Sie den Registrierungseditor ( regedit.exe ) und löschen Sie den folgenden Schlüssel, um den Kontextmenüeintrag " Handle regedit.exe zu entfernen:

 HKEY_CURRENT_USER \ Software \ Classes \ * \ shell \ FindHandle 

4. OpenFiles.exe - ein integriertes Konsolentool

Ein weiteres integriertes Tool, das wir verwenden werden, ist Openfiles.exe, ein Konsolentool, das für Windows nicht neu ist. Es wurde ursprünglich im Jahr 2000 als Teil der Windows Resource Kit 2000/2003-Tools eingeführt. Dieses Dienstprogramm war dann standardmäßig in Windows Vista und höher (einschließlich Windows 10) enthalten. Openfiles zeigt die aktuell geöffnete Dateiliste aus lokalen oder freigegebenen Ordnern zusammen mit der Handle-ID und dem Namen der ausführbaren Datei an. Mit diesem Tool können Sie auch eine oder mehrere Dateien, die remote geöffnet werden, von einem freigegebenen Ordner trennen.

Aktivieren Sie zum ersten Mal das globale Flag "Objektliste pflegen"

Um die Verfolgung lokaler Dateihandles zu aktivieren, müssen Sie zunächst das Flag "Objektliste verwalten" aktivieren, indem Sie den folgenden Befehl über die Eingabeaufforderung "admin" ausführen.

 openfiles / local on 

Sie sehen die folgende Meldung:

INFO: Das globale Systemflag 'Objektliste pflegen' ist derzeit aktiviert.

Sie müssen diesen Befehl nur zum ersten Mal ausführen. Starten Sie dann Windows neu, damit die Änderung wirksam wird.

Zeigen Sie geöffnete Dateien und die entsprechenden Prozessnamen an

Geben Sie nach dem Neustart von Windows in einem Eingabeaufforderungsfenster des Administrators Folgendes ein:

 offene Dateien 

Hier werden die Datei- / Handle-ID, der Prozessname und die Liste der lokal oder remote über lokale Freigabepunkte geöffneten Dateien in einem Tabellenformat aufgelistet.

Verwenden Sie den Parameter / query, um die Ausgabe in den Formaten List oder CSV anzuzeigen.

 openfiles / query / FO LIST openfiles / query / FO CSV 

Um die Ausgabe in die Zwischenablage zu kopieren, leiten Sie die Ausgabe wie folgt an Clip.exe weiter. Fügen Sie dann die Ausgabe in Notepad oder einen anderen Editor Ihrer Wahl ein.

$config[ads_text6] not found
 openfiles | clip 

 openfiles / query / FO LIST | clip openfiles / query / FO CSV | clip 

Weitere Informationen zum Kopieren der Eingabeaufforderung in die Zwischenablage oder zum Speichern der Ausgabe in einer Datei finden Sie im Artikel Kopieren des Eingabetextes der Eingabeaufforderung in die Zwischenablage oder Speichern in der Datei.

Um festzustellen, ob eine bestimmte Datei von einem Programm verwendet wird (und um zu wissen, welches Programm), können Sie die folgende Befehlszeile verwenden.

 openfiles | findstr / i 

Beispiel:

 openfiles | findstr / i eiffel 

Der obige Befehl listet alle geöffneten Dateien auf, deren Dateiname das Wort "eiffel" enthält. In diesem Beispiel hat Word 2016 derzeit die Sperre für die Datei "The Eiffel Tower.docx" (ID 4576).

Das Dialogfeld "Datei wird verwendet" sagt mir dasselbe.

Trennen Sie remote geöffnete Dateien vom freigegebenen Ordner.

Verwenden Sie den Parameter /disconnect, um Verbindungen zu dieser Datei zu trennen, um Dateien zu trennen, die aus einem freigegebenen Ordner geöffnet wurden, damit Sie die Datei löschen, umbenennen oder den Inhalt ändern können. Hier sind die Befehlszeilenoptionen.

 OPENFILES / Disconnect [/ S-System [/ U-Benutzername [/ P [Passwort]]] {[/ ID-ID] [/ A Zugriff durch] [/ O openmode]} [/ OP openfile] Beschreibung: Ermöglicht einem Administrator das Trennen von Dateien und Ordner, die remote über einen freigegebenen Ordner geöffnet wurden. Parameterliste: / S-System Gibt das Remote-System an, zu dem eine Verbindung hergestellt werden soll. / U [domain \] user Gibt den Benutzerkontext an, unter dem der Befehl ausgeführt werden soll. / P [Passwort] Gibt das Passwort für den angegebenen Benutzerkontext an. / ID id Gibt an, dass geöffnete Dateien nach Datei-ID getrennt werden sollen. Der Platzhalter "*" kann verwendet werden. / A accessby Gibt an, dass alle geöffneten Dateien nach dem Wert "accessbyby" getrennt werden sollen. Der Platzhalter "*" kann verwendet werden. / O openmode Gibt an, dass alle geöffneten Dateien nach dem Wert "openmode" getrennt werden sollen. Gültige Werte sind Lesen, Schreiben oder Lesen / Schreiben. Der Platzhalter "*" kann verwendet werden. / OP openfile Gibt an, dass alle offenen Dateiverbindungen getrennt werden sollen, die durch einen bestimmten Namen "open file" erstellt wurden. Der Platzhalter "*" kann verwendet werden. /? Zeigt diese Hilfemeldung an. Beispiele: OPENFILES / Disconnect /? OPENFILES / Disconnect / ID 1 OPENFILES / Disconnect / A Benutzername OPENFILES / Disconnect / O Lese- / Schreib-OPENFILES / Disconnect / OP "c: \ Eigene Dateien \ somedoc.doc" / ID 234 OPENFILES / Disconnect / S-System / U-Benutzername / ID 5 OPENFILES / Trennen / S-System / U-Benutzername / P-Passwort / ID * 

Openfiles.exe erledigt perfekt die Aufgabe, alle geöffneten Dateien zusammen mit den Prozessnamen aufzulisten, kann jedoch keine Prozesse zwangsweise beenden. Dieses hervorragende (aber übersehene) integrierte Konsolentool kann jedoch nützlich sein, wenn Sie schnell einen Prozessnamen finden möchten, der eine Datei verwendet, oder eine Datei trennen möchten, auf die ein Netzwerkbenutzer über einen freigegebenen Ordner zugreift - ohne Abhängigkeit auf eine Drittanbieterlösung.

5. OpenedFilesView

OpenedFilesView von Nirsoft zeigt die Liste aller geöffneten Dateien auf Ihrem System an. Für jede geöffnete Datei werden zusätzliche Informationen angezeigt: Handle-Wert, Lese- / Schreib- / Löschzugriff, Dateiposition, der Prozess, der die Datei geöffnet hat, und vieles mehr. Optional können Sie auch eine oder mehrere geöffnete Dateien schließen oder den Prozess schließen öffnete diese Dateien.

Sie können Prozesse ausgewählter Dateien oder ausgewählte Dateihandles schließen. Die Handle-Nummer wird in Hex-Werten dargestellt, während das Konsolentool openfiles.exe sie im normalen Format anzeigt. Mit diesem Tool können Sie auch eine Kontextmenüoption hinzufügen, um über den Kontextmenü schnell den Prozess zu finden, der gerade eine Datei verwendet. Die Kontextmenüoption / Befehlszeilenunterstützung ist meiner Meinung nach eine der nützlichsten Funktionen von OpenedFilesView.

Ähnlicher Artikel