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

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

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

19.08.2008 04:37:35
10 ОТВЕТОВ
РЕШЕНИЕ

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

72
19.08.2008 04:48:32
Это действительно отвечает на вопрос? Process Explorer позволяет увидеть, какие файлы открыты для определенного процесса / handle / dll / что угодно, но это обратное отображение. См. Мой ответ stackoverflow.com/questions/15708/… на этот вопрос.
Greg Mattes 9.10.2008 17:37:33
Да. Нажмите Find Handle или Dll (или нажмите Ctrl-F), введите имя файла, который вы ищете, и вы получите список процессов с этим открытым файлом.
Jay Hofacker 10.10.2008 00:07:33
Process Explorer теперь переименован и включен в «Process Monitor».
Matthew McCullough 26.02.2009 15:46:44
@MatthewMcCullough Есть ссылки? Вы не правы, Process Explorer и Process Monitor - две разные утилиты.
Alois Mahdal 21.03.2012 09:48:48
Есть ли в Process Explorer интерфейс командной строки?
Anderson Green 22.02.2013 19:44:56

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

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

3
19.08.2008 04:40:13
Обратите внимание, что это показывает только общие файлы, которые открыты другими пользователями сети. Это не помогает найти файлы, которые открыты в локальной системе. Выполнение этого на сервере, вероятно, сообщит вам, у какого пользователя открыт файл, а не какая программа на компьютере этого пользователя. Process Explorer (как упомянуто @JayHofacker) работал хорошо для меня.
tomlogic 27.02.2012 21:45:10

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

10
19.08.2008 04:46:41
@slipsec FileMon и Regmon теперь заменены Process Monitor v3.2 в версиях Windows, начиная с Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 и Windows Vista.
Lucky 17.08.2015 09:35:38

Попробуйте разблокировать .

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

5
9.10.2008 17:35:23
Unlocker отображает только заблокированные файлы, а не открытые файлы. Большинство программ Windows блокирует используемую им DLL, но не ваши документы.
Tobias 26.03.2010 10:26:44

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

handle -p pid
listdlls -p pid

Вы можете найти пид с sysinternals pslist.

39
17.02.2016 09:14:05

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

TaskList /M nameof.dll
5
8.04.2009 18:03:30

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

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

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

2
11.03.2010 13:45:18
если бы только у нас был исходный код для них
graywolf 2.03.2016 12:27:55

В OpenedFilesView в меню «Параметры» есть пункт «Показать сетевые файлы». Возможно, с включенной вышеупомянутой утилитой есть какая-то польза.

2
28.11.2011 10:21:19

Один эквивалент lsof может быть объединен с выходом из дескриптора Sysinternals и listdll , то есть:

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

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

Кроме того, listdll и дескриптор не создают непрерывную табличную форму, поэтому фильтрация имени файла будет скрывать 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 - тот, у кого этот файл открыт.

6
1.09.2014 15:27:46

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

3
9.05.2012 15:24:48
Я прихожу сюда в поисках способа выяснить, кто мешает мне удалить папку и избежать перезапуска, и я нахожу, что нужная мне команда требует настройки конфигурации, которая ... как вы уже догадались ... требует перезагрузки. Как очень очень окна.
Gus 2.11.2016 22:18:05
ребята, учтите, что запуск команды openfiles занимает ДОЛГОЕ время (порядка 4 минут)!
NH. 19.11.2018 20:17:19