Как я могу определить, открыт ли конкретный файл в Windows? [закрытый]
одним из моих любимых инструментов для linux является lsof - настоящий швейцарский армейский нож!
сегодня мне стало интересно, какие программы в системе WinXP имеют конкретный файл открыт. Есть ли эквивалентная утилита для lsof? Кроме того, файл, о котором идет речь, был по сетевому ресурсу, поэтому я не уверен, что это усложняет дело.
10 ответов:
использовать Process Explorer из набора Sysinternals функция Find Handle или DLL позволит вам искать процесс с открытым файлом.
в эквиваленте
lsof -p pid- Это комбинированный вывод из дескриптора sysinternals и listdlls, т. е.handle -p pid listdlls -p pidвы можете узнать pid с sysinternals
pslist.
один эквивалент lsof смогл быть совмещенным выходом от Sysinternals'дескриптор и listdlls, например:
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к сожалению, вам придется "Запуск от имени администратора", чтобы иметь возможность использовать их.
и 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.
сайт Unlocker имеет отличную диаграмму (прокрутите вниз после перехода по ссылке), которая показывает сравнение с другими инструментами. Очевидно, что такие сравнения обычно предвзяты, поскольку они обычно написаны автором инструмента, но диаграмма, по крайней мере, перечисляет альтернативы, чтобы вы могли попробовать их сами.
Если файл a .dll, то вы можете использовать список задач приложение командной строки, чтобы увидеть, кто получил его открытым:
TaskList /M nameof.dll
Если вы щелкните правой кнопкой мыши на значке" компьютер "(или" Мой компьютер") и выберите" Управление " из всплывающего меню, это приведет вас к консоли управления компьютером.
там, в разделе Системные инструменты\общие папки, вы найдете "открытые файлы". Это, вероятно, близко к тому, что вы хотите, но если файл находится в сетевом ресурсе, вам нужно будет сделать то же самое на сервере, на котором живет файл.
есть программа "OpenFiles", кажется, является частью windows 7. Кажется, что он может делать то, что вы хотите. Он может перечислить файлы, открытые удаленными пользователями (через общий доступ к файлам) и, после вызова "openfiles / Local on" и перезагрузка системы, он должен иметь возможность показывать файлы, открытые локально. Последний, как говорят, имеет штрафы за производительность.
используйте проводник процессов, чтобы найти идентификатор процесса. Тогда используйте Handle чтобы узнать, какие файлы открыты.
например ручка-p
Мне нравится такой подход, потому что вы используете утилиты от самой Microsoft.
на OpenedFilesView, в меню Параметры, есть пункт меню с именем "показать сетевые файлы". Возможно, с включенным этим, вышеупомянутая утилита имеет некоторую пользу.
Comments