Wie kann ich feststellen, ob eine bestimmte Datei in Windows geöffnet ist? [geschlossen]


87

Eines meiner Lieblingswerkzeuge für Linux ist lsof - ein echtes Schweizer Taschenmesser!

Heute habe ich mich gefragt, bei welchen Programmen auf einem WinXP-System eine bestimmte Datei geöffnet war. Gibt es einen äquivalenten Nutzen für lsof? Außerdem befand sich die fragliche Datei über eine Netzwerkfreigabe, sodass ich nicht sicher bin, ob dies die Sache kompliziert.

Antworten:


73

Verwenden Sie den Prozess-Explorer aus der Sysinternals Suite. Mit der Funktion "Handle suchen" oder "DLL" können Sie nach dem Prozess suchen, bei dem diese Datei geöffnet ist.


Beantwortet dies wirklich die Frage? Mit dem Prozess-Explorer können Sie sehen, welche Dateien für einen bestimmten Prozess / Handle / DLL / was auch immer geöffnet sind. Dies ist jedoch die umgekehrte Zuordnung. Siehe meine Antwort stackoverflow.com/questions/15708/… auf diese Frage.
Greg Mattes

6
Ja tut es. Klicken Sie auf Find Handle oder Dll (oder drücken Sie Strg-F), geben Sie den Namen der gesuchten Datei ein und Sie erhalten eine Liste der Prozesse, bei denen diese Datei geöffnet ist.
Jay Hofacker

Process Explorer wurde jetzt umbenannt und in "Process Monitor" gebündelt.
Matthew McCullough

7
@MatthewMcCullough Referenzen? Sie sind falsch, Process Explorer und Process Monitor sind zwei verschiedene Dienstprogramme.
Alois Mahdal

2
Verfügt Process Explorer über eine Befehlszeilenschnittstelle?
Anderson Green

40

Das Äquivalent von lsof -p pidist die kombinierte Ausgabe von sysinternals handle und listdlls, dh

handle -p pid
listdlls -p pid

Sie können pid mit sysinternals herausfinden pslist.



6

Ein Äquivalent von lsof könnte die Ausgabe von Sysinternals ' Handle und Listendlls sein , dh:

c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
   10: File  (RW-)   C:\Windows
   1C: File  (RW-)   D:\some\locked\path\OpenFile.txt
[...]

c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls

  Base        Size      Version         Path
  0x00400000  0x29000   2.25.0000.0000  D:\opt\SysinternalsSuite\Listdlls.exe
  0x76ed0000  0x180000  6.01.7601.17725  C:\Windows\SysWOW64\ntdll.dll
[...]

c:\SysInternals>listdlls

Leider müssen Sie "als Administrator ausführen", um sie verwenden zu können.

Außerdem erzeugen listdlls und handle keine fortlaufende tabellenähnliche Form, sodass durch Filtern des Dateinamens die PID ausgeblendet wird . findstr /c:pid: /c:<filename>sollte Sie jedoch mit beiden Dienstprogrammen sehr nahe bringen

c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
  188: File  (RW-)   D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]

Hier können wir sehen, dass gvim.exe diese Datei geöffnet hat.


5

Versuchen Sie Unlocker .

Die Unlocker-Site verfügt über ein übersichtliches Diagramm (scrollen Sie nach unten, nachdem Sie dem Link gefolgt sind), das einen Vergleich mit anderen Tools zeigt. Offensichtlich sind solche Vergleiche normalerweise voreingenommen, da sie normalerweise vom Tool-Autor geschrieben werden. In der Tabelle sind jedoch zumindest die Alternativen aufgeführt, damit Sie sie selbst ausprobieren können.


4
Unlocker listet nur gesperrte Dateien auf, nicht geöffnete Dateien. Die meisten Windows-Programme sperren die verwendete DLL, nicht jedoch Ihre Dokumente.
Tobias

5

Wenn es sich bei der Datei um eine DLL handelt, können Sie mithilfe der TaskList- Befehlszeilen-App sehen, von wem sie geöffnet wurde:

TaskList /M nameof.dll

3

Wenn Sie mit der rechten Maustaste auf das Symbol "Computer" (oder "Arbeitsplatz") klicken und im Popup-Menü "Verwalten" auswählen, gelangen Sie zur Computerverwaltungskonsole.

Dort finden Sie unter System Tools \ Shared Folders "Open Files". Dies entspricht wahrscheinlich Ihren Wünschen. Wenn sich die Datei jedoch auf einer Netzwerkfreigabe befindet, müssen Sie auf dem Server, auf dem sich die Datei befindet, dasselbe tun.


3
Beachten Sie, dass hier nur freigegebene Dateien angezeigt werden, die von anderen Netzwerkbenutzern geöffnet werden. Es hilft nicht, Dateien zu finden, die auf dem lokalen System geöffnet sind. Wenn Sie dies auf dem Server tun, erfahren Sie wahrscheinlich, welcher Benutzer die Datei geöffnet hat, aber nicht welches Programm auf dem Computer dieses Benutzers. Der Prozess-Explorer (wie von @JayHofacker erwähnt) hat bei mir gut funktioniert.
Tomlogic

3

Es gibt ein Programm "OpenFiles", das Teil von Windows 7 zu sein scheint. Es scheint, dass es tun kann, was Sie wollen. Es kann Dateien auflisten, die von Remotebenutzern geöffnet wurden (über die Dateifreigabe), und nach dem Aufruf von "openfiles / Local on" und einem Systemneustart sollte es in der Lage sein, lokal geöffnete Dateien anzuzeigen. Letzteres soll Leistungseinbußen haben.


1
Ich komme hierher, um herauszufinden, wer mich daran hindert, einen Ordner zu löschen und einen Neustart zu vermeiden, und ich finde, dass der Befehl, den ich benötige, ein Konfigurationssetup erfordert, das ... Sie haben es erraten ... einen Neustart erfordert. Wie sehr sehr Fenster.
Gus

Leute, seid euch bewusst, dass der Befehl openfiles eine LANGE Zeit in Anspruch nimmt (in der Größenordnung von 4 Minuten)!
NH.

2

Verwenden Sie den Prozess-Explorer, um die Prozess-ID zu ermitteln. Verwenden Sie dann Handle , um herauszufinden, welche Dateien geöffnet sind.

ZB Griff -p

Ich mag diesen Ansatz, weil Sie Dienstprogramme von Microsoft selbst verwenden.


Wenn wir nur Quellcode für diese hätten
Graywolf

2

In OpenedFilesView gibt es im Menü Optionen einen Menüpunkt mit dem Namen "Netzwerkdateien anzeigen". Wenn dies aktiviert ist, ist das oben genannte Dienstprogramm möglicherweise von Nutzen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.