Как я могу определить, открыт ли конкретный файл в Windows?[закрыто]
-
08-06-2019 - |
Вопрос
Одним из моих любимых инструментов для Linux является lsof - настоящий швейцарский армейский нож!
Сегодня я поймал себя на том, что задаюсь вопросом, в каких программах в системе WinXP был открыт определенный файл.Есть ли какая-либо эквивалентная утилита для lsof?Кроме того, файл, о котором идет речь, находился через общий сетевой ресурс, поэтому я не уверен, усложняет ли это дело.
Решение
Использование Обозреватель процессов из пакета Sysinternals функция Find Handle или DLL позволит вам выполнить поиск процесса с этим открытым файлом.
Другие советы
Эквивалент lsof -p pid
это комбинированный вывод из sysinternals handle и listdlls, т.е.
handle -p pid
listdlls -p pid
вы можете узнать pid с помощью sysinternals pslist
.
Один эквивалент 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.
В Просмотр открытых файлов, в меню Опций есть пункт меню с именем "Показать сетевые файлы".Возможно, если это включено, вышеупомянутая утилита принесет какую-то пользу.