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



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



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

719   10  

10 ответов:

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

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

handle -p pid
listdlls -p pid

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

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

один эквивалент 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

    Ничего не найдено.