Как я могу определить, открыт ли конкретный файл в Windows?[закрыто]

StackOverflow https://stackoverflow.com/questions/15708

Вопрос

Одним из моих любимых инструментов для Linux является lsof - настоящий швейцарский армейский нож!

Сегодня я поймал себя на том, что задаюсь вопросом, в каких программах в системе WinXP был открыт определенный файл.Есть ли какая-либо эквивалентная утилита для lsof?Кроме того, файл, о котором идет речь, находился через общий сетевой ресурс, поэтому я не уверен, усложняет ли это дело.

Это было полезно?

Решение

Использование Обозреватель процессов из пакета Sysinternals функция Find Handle или DLL позволит вам выполнить поиск процесса с этим открытым файлом.

Другие советы

Эквивалент lsof -p pid это комбинированный вывод из sysinternals handle и listdlls, т.е.

handle -p pid
listdlls -p pid

вы можете узнать pid с помощью sysinternals pslist.

Попробуй Ручка. Филемон & Регмон также отлично подходят для того, чтобы попытаться выяснить, что программа duce foo делает с вашей системой.

Один эквивалент lsof может быть объединен вывод из Sysinternals' ручка и список троллей, т. е.:

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

К сожалению, вы должны "запускаться от имени администратора", чтобы иметь возможность их использовать.

Также список троллей и ручка не создавайте непрерывную табличную форму, чтобы фильтрующее имя файла скрывало PID. findstr /c:pid: /c:<filename> тем не менее, вы должны быть очень близки к обеим утилитам

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
[...]

Здесь мы можем видеть, что gvim.exe - это тот, у которого открыт этот файл.

Попробуй Разблокировщик.

На сайте Unlocker есть отличная диаграмма (прокрутите вниз после перехода по ссылке), которая показывает сравнение с другими инструментами.Очевидно, что такие сравнения обычно предвзяты, поскольку они, как правило, написаны автором инструмента, но на диаграмме, по крайней мере, перечислены альтернативы, чтобы вы могли попробовать их сами.

Если файл является .dll, то вы можете использовать Список задач приложение командной строки, чтобы узнать, у кого оно открыто:

TaskList /M nameof.dll

Если вы щелкните правой кнопкой мыши на значке "Компьютер" (или "Мой компьютер") и выберите "Управление" во всплывающем меню, это приведет вас к консоли управления компьютером.

Там, в разделе Системные инструменты\ Общие папки, вы найдете "Открыть файлы".Вероятно, это близко к тому, что вы хотите, но если файл находится в общей сетевой папке, вам нужно будет сделать то же самое на сервере, на котором находится файл.

Есть программа "OpenFiles", кажется, входящая в состав Windows 7.Кажется, что он может делать то, что вы хотите.Он может отображать файлы, открытые удаленными пользователями (через общий файловый ресурс), и после вызова "openfiles / Local on" и перезагрузки системы он должен иметь возможность отображать файлы, открытые локально.Говорят, что у последнего есть ограничения по производительности.

Используйте Process Explorer, чтобы найти идентификатор процесса.Затем используйте Ручка чтобы узнать, какие файлы открыты.

Например, ручка -p

Мне нравится такой подход, потому что вы используете утилиты от самой Microsoft.

В Просмотр открытых файлов, в меню Опций есть пункт меню с именем "Показать сетевые файлы".Возможно, если это включено, вышеупомянутая утилита принесет какую-то пользу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top