Назад | Перейти на главную страницу

Как узнать, какой процесс удерживает файл открытым в Windows?

Одна вещь, которая меня бесконечно раздражает в Windows, - это старая нарушение обмена ошибка. Часто вы не можете определить, что его держит. Обычно это просто редактор или проводник, просто указывающий на соответствующий каталог, но иногда мне приходилось прибегать к перезагрузке моей машины.

Есть предложения, как найти виновника?

Я добился успеха с Sysinternals Обозреватель процессов. С его помощью вы можете найти, в каком процессе (ах) открыт файл, и вы можете использовать его для закрытия дескриптора (ов), если хотите. Конечно, безопаснее закрыть весь процесс. Будьте осторожны и рассудительны.

Чтобы найти конкретный файл, используйте опцию меню Find->Find Handle or DLL... Введите часть пути к файлу. Список процессов появится ниже.

Если вы предпочитаете командную строку, пакет Sysinternals включает инструмент командной строки. Ручка, в котором перечислены открытые дескрипторы.

Примеры

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "e:\" (находит все файлы, открытые с диска e:\"
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i "file-or-path-in-question"

Вы можете использовать Монитор ресурсов для этого, что приходит встроенный с Windows 7, 8 и 10.

  1. открыто Монитор ресурсов, который можно найти
    • Путем поиска Монитор ресурсов или resmon.exe в стартовом меню или
    • Как кнопка на Производительность вкладка в вашем Диспетчер задач
  2. Перейти к ЦПУ вкладка
  3. Использовать поле поиска в Связанные дескрипторы раздел
    • См. Синюю стрелку на снимке экрана ниже

Когда вы нашли дескриптор, вы можете идентифицировать процесс, посмотрев на столбец Image и / или PID.

Затем вы можете попробовать закрыть приложение, как обычно, или, если это невозможно, просто щелкнуть правой кнопкой мыши дескриптор и убить процесс прямо оттуда. Очень просто!

Скопировано из моего исходного ответа: https://superuser.com/a/643312/62

Попробуйте открытые файлы команда.

Только будьте очень осторожны с закрывающимися ручками; это даже более опасно, чем вы думаете, из-за повторного использования дескрипторов - если вы закроете дескриптор файла, и программа откроет что-то еще, этот исходный дескриптор файла, который вы закрыли, может быть повторно использован для этого «чего-то еще». А теперь угадайте, что произойдет, если программа продолжит работу, думая, что она работает с файлом (дескриптор которого вы закрыли), когда на самом деле этот дескриптор файла теперь указывает на что-то еще.

видеть Сообщение Раймонда Чена по этой теме

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

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

Между тем, другой дескриптор, который вы принудительно закрыли, был повторно использован в качестве дескриптора мьютекса, который используется для предотвращения повреждения данных. Когда исходный дескриптор файла закрывается, дескриптор мьютекса закрывается и защита от повреждения данных теряется. Чем дольше работает служба, тем больше искажаются ее индексы. В конце концов кто-то замечает, что индекс возвращает неверные результаты. И когда вы пытаетесь перезапустить службу, она терпит неудачу, потому что ее файлы конфигурации были повреждены.

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

Я использовал Ручка удалось найти такие процессы в прошлом.

Локхантер (http://lockhunter.com/) работает на 32- и 64-битных системах.

Чтобы уточнить, это, скорее всего, является результатом неправильного поведения сторонних приложений, не использующих CreateFile API вызывает правильно, чем это должно быть что-либо в самой Windows. Возможно, это следствие замысла CreateFile, но готово, то сделано, и мы не можем вернуться.

Обычно при открытии файла в программе Windows у вас есть возможность указать флаг, разрешающий общий доступ. Если вы не укажете флаг, программа получит монопольный доступ к файлу.

Теперь, если в этом виноват Проводник, возможно, это только на поверхности, а истинный виновник - это то, что устанавливает расширение оболочки, которое открывает все файлы в папке для своих собственных целей, но либо слишком увлечен этим, или это не убирает должным образом после себя. Symantec AV - это то, что я видел раньше, и я не удивлюсь, если виноваты и другие антивирусные программы. Плагины управления исходным кодом также могут быть виноваты.

Так что на самом деле это не ответ, а всего лишь несколько советов, чтобы не всегда обвинять Windows в том, что может быть плохо написанной сторонней программой (что также может произойти в любой другой ОС, которая имеет неявную блокировку файлов, но любая ОС на основе unix имеет общий доступ через дефолт).

Кто запер меня хорошо работает и заставляет людей восхищаться своим названием!

На удаленном сервере, когда вы проверяете общий сетевой ресурс, такая простая вещь, как консоль управления компьютером, может отобразить эту информацию и закрыть файл.

По поводу проводника, удерживающего открытый файл: «Когда это происходит с файлом, который нужно удалить, у вас есть выбор: принудительно закрыть дескриптор или перезагрузить».

Вы можете просто завершить Explorer.

Если это одноразовая вещь (Explorer обычно не держит этот файл открытым), то я бы предположил, что выход из системы и повторный вход в нее помогут.

В противном случае завершите процесс проводника рабочего стола и делайте что хотите, пока его нет. Сначала запустите копию cmd.exe (вам понадобится пользовательский интерфейс для выполнения запланированной очистки). Убедитесь, что на компьютере не запущены проводники. Затем убейте последний проводник, например, с помощью диспетчера задач. Делайте что хотите в командной строке. Наконец, запустите проводник из командной строки, и он станет рабочим столом.

Я предполагаю, что могут возникнуть некоторые остаточные неприятности, если некоторые программы системной панели не могут справиться с перезапуском оболочки.

Файлы могут быть заблокированы локальными процессами (разблокировщик является инструментом для использования) и доступом к файлам через общие ресурсы.

В Windows есть встроенная функция, которая показывает, какие файлы на локальном компьютере открыты / заблокированы удаленным компьютером (на котором файл открыт через общую папку):

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

Там можно даже принудительно закрыть файл.

Есть NirSoft's Просмотр открытых файлов также.

С участием Хакер процессов вы можете легко определить, какие процессы содержат ваши файлы:

Вышеупомянутые ответы с одобренными голосами охватывают ситуации, когда программный процесс держит дескриптор файла открытым, что (к счастью) большую часть времени - однако в некоторых случаях (как это происходит в этой системе в настоящее время) сама система содержит дескриптор файла открыто.

Вы можете идентифицировать эту ситуацию, следуя инструкциям, чтобы найти процесс удержания дескриптора файла с помощью проводника процессов выше, и отметив, что имя процесса указано как 'system', или следуя инструкциям с помощью монитора ресурсов и отметив, что изображение не отображается открытие дескриптора интересующего вас файла (хотя, очевидно, что-то происходит, поскольку вы не можете редактировать / удалять файл и т. д.).

Если это произойдет, ваш вариант (насколько мне известно) - перезапустить или забыть о каких-либо действиях с этим файлом.

Я был включен в Расширенный диспетчер задач некоторое время назад в блоге Джереми Заводни, и он отлично подходит для отслеживания дополнительной информации о процессах. +1 для Process Explorer, как указано выше, особенно для уничтожения процессов, которые не завершаются стандартным диспетчером задач.

Есть инструмент FILEMON и показывает открытые файлы и дескрипторы. Трудно угнаться за его дисплеем, если вы смотрите его вживую, он делает так быстро. Но вы можете остановить его отображение в реальном времени, и вы можете наблюдать за всей активностью открытия / записи файлов. Сейчас принадлежит Microsoft, но изначально принадлежит Sysinternals