Как определить процесс, заблокировавший файл в Windows

How Identify Process That Has Locked File Windows

открытые файлы

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



Однако бывают случаи, когда в диалоговом окне «Файл используется» не отображается имя процесса, заблокировавшего файл, который вы пытаетесь удалить. В некоторых случаях в диалоговом окне будет отображаться «действие не может быть завершено, потому что файл открыт в другой процесс '.



Найти, какой процесс заблокировал файл



Для исследования процессов и заблокированных файлов Windows Sysinternals Process Explorer, вероятно, является первым вариантом, который приходит на ум большинству пользователей. Однако есть два встроенные решения для отображения текущего списка открытых файлов с соответствующими именами процессов.

Найдите, какой процесс заблокировал файл, используя:

  1. Монитор ресурсов (resmon.exe)
  2. Обозреватель процессов от Microsoft Sysinternals
  3. Дескриптор от Microsoft Sysinternals
  4. Встроенный консольный инструмент Openfiles.exe
  5. OpenedFilesView от Nirsoft.net (сторонний)

1. Монитор ресурсов

Монитор ресурсов (resmon.exe) - это встроенный инструмент, обладающий множеством полезных функций. С помощью монитора ресурсов вы можете отслеживать текущее использование сети и Интернета , просмотреть связанные дескрипторы для заблокированные файлы , а также управлять процессами так же, как при помощи диспетчера задач.



Чтобы найти имя процесса, в котором заблокирован файл, щелкните вкладку ЦП, введите имя файла или его часть в текстовое поле «Связанные дескрипторы».

Найти, какой процесс заблокировал файл

Мы рассмотрели Resource Monitor ранее. Ознакомьтесь с этими статьями:

2. Обозреватель процессов

Обозреватель процессов не нуждается в представлении. В Process Explorer все, что вам нужно сделать, это использовать функцию «Найти» и ввести имя файла. Это показывает процесс, обращающийся к файлу.

Найти, какой процесс заблокировал файл

В представлении нижней панели при необходимости можно закрыть дескриптор файла.

Вы должны запустить Process Explorer от имени администратора, чтобы управлять процессами с повышенными правами. Чтобы повысить уровень Process Explorer, щелкните меню Файл → Показать детали для всех процессов .

Ознакомьтесь со статьями, связанными с Process Explorer:

3. Обработка из Windows Sysinternals

Справиться - это утилита от Microsoft Sysinternals, которая отображает информацию об открытых дескрипторах для любого процесса в системе. Вы можете использовать его для просмотра программ, в которых открыт файл, или для просмотра типов объектов и имен всех дескрипторов программы. Ручка похожа на версию командной строки Обозреватель процессов .

Заметка: Ручка v4.21 имеет маленькая ошибка где он всегда сообщает «Соответствующие дескрипторы не найдены», если буква диска в верхнем регистре. Надеюсь, Microsoft исправит это в следующем обновлении.

Из Командная строка администратора window, используйте синтаксис командной строки, чтобы найти процесс, в котором открыт файл:

handle.exe -a -u имя_файла с_путьем

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

Пример:

handle.exe -a -u 'c:  users  ramesh  desktop  Mandate-form.pdf'

найти файл, заблокированный процессом - дескриптор sysinternals

(Упоминание имени файла без пути может работать не во всех ситуациях. Желательно всегда указывать полный путь.)

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

Обработчик Sysinternals: аргументы командной строки

использование: handle [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [имя] [-nobanner]
Сбросьте всю информацию о ручках.
-l Просто покажите маркеры разделов, поддерживаемых файлом подкачки.
-c Закрывает указанный дескриптор (интерпретируется как шестнадцатеричное число).
Вы должны указать процесс по его PID. ВНИМАНИЕ: закрытие дескрипторов может вызвать нестабильность приложения или системы.
Не запрашивать подтверждение закрытия дескриптора.
-s Выведите счетчик каждого типа открытой ручки.
-u Отображать имя пользователя-владельца при поиске ручек.
-п Дамп дескрипторов, принадлежащих процессу (принимается частичное имя).
имя Искать дескрипторы объектов с (фрагмент принят).
-nobanner Не отображать стартовый баннер и сообщение об авторских правах.

Никакие аргументы не сбрасывают все ссылки на файлы.

Добавить Sysinternals Handle в контекстное меню

Вы можете добавить Sysinternals Handle в контекстное меню для файлов, чтобы быстро найти программу, которая заблокировала файл. Чтобы добавить его в контекстное меню, выполните следующие действия:

  1. Скачать Справиться с сайта Microsoft Sysinternals.
  2. Скопируйте файлы handle.exe & handle64.exe в папку - например, d: tools
  3. Скопируйте следующие строки кода в Блокнот и сохраните файл как find_handle.vbs на постоянное место жительства.
    'Запускает утилиту Sysinternals Handle.exe с аргументом имени файла. «© Рамеш Сринивасан - https://winhelponline.com/blog» Дата создания: 29 марта 2008 г. «Дата обновления: 11 июня 2019 г.» Для всех версий Windows, включая Windows 10 Option Explicit Dim objShell, WshShell, objFSO, sBaseKey, sFilename Установить objShell = CreateObject ('Shell.Application') Установить WshShell = CreateObject ('WScript.Shell') Установить objFSO = CreateObject ('Scripting.FileSystemObject') Если WScript.Arguments.Count = 0 Тогда sBaseUKey = 'HKC Software  Classes  *  shell  'WshShell.RegWrite sBaseKey &' FindHandle  ',' Find Handle ',' REG_SZ 'WshShell.RegWrite sBaseKey &' FindHandle  command  ',' wscript.exe '&' '' '& _ WScript.ScriptFullName & '' '' & '' & '' '' & '% 1' & '' '', 'REG_SZ' Else If objFSO.FileExists (WScript.Arguments (0)) = True Then sFilename = lcase (WScript.Arguments (0)) objShell.ShellExecute 'cmd.exe', '/kd:	oolshandle.exe -a -u' & _ '' '' & sFilename & '' '', '', ' runas ', 1 Конец Если Конец Если

    Заметка: Путь Sysinternals Handle.exe жестко задан как d: инструменты handle.exe в приведенном выше сценарии. Если программа находится по другому пути, измените путь в скрипте соответствующим образом. Для 64-битной Windows вы можете использовать либо handle.exe или же handle64.exe

  4. Двойной щелчок find_handle.vbs для добавления пункта контекстного меню в реестр. Вам нужно будет сделать это только один раз. Но если вы переместите сценарий в другую папку, вам нужно будет дважды щелкнуть по нему еще раз, чтобы обновить путь в реестре.
  5. Вы увидите Найти ручку при щелчке правой кнопкой мыши по файлу. Щелчок по нему запустит сценарий, который, в свою очередь, запускает handle.exe с аргументом имени файла, чтобы найти процесс, у которого файл заблокирован.

    найти файл, заблокированный процессом - дескриптор sysinternals

Чтобы удалить Найти ручку пункт контекстного меню, запустите редактор реестра ( regedit.exe ) и удалите следующий ключ:

HKEY_CURRENT_USER  Программное обеспечение  Классы  *  оболочка  FindHandle

4. OpenFiles.exe - встроенный консольный инструмент.

Еще один встроенный инструмент, который мы собираемся использовать, - это Openfiles.exe, консольный инструмент, который не является новым для Windows. Первоначально он был представлен в 2000 году как часть инструментов Windows Resource Kit 2000/2003. Затем эта утилита была включена по умолчанию в Windows Vista и выше (включая Windows 10). Openfiles отображает список открытых в данный момент файлов из локальных или общих папок вместе с идентификатором дескриптора и именем исполняемого файла процесса. Этот инструмент также позволяет отключать один или несколько файлов, которые открываются удаленно из общей папки.

Включите глобальный флаг «Ведение списка объектов» в первый раз

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

openfiles / local на

Вы увидите следующее сообщение:

ИНФОРМАЦИЯ: Глобальный флаг системы «поддерживать список объектов» в настоящее время включен.

Вам нужно будет запустить эту команду только в первый раз. Затем перезапустите Windows, чтобы изменения вступили в силу.

Просмотр открытых файлов и соответствующих имён процессов

После перезапуска Windows из Командная строка администратора окно, введите:

открытые файлы

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

Чтобы просмотреть вывод в форматах List или CSV, используйте параметр / query.

openfiles / query / СПИСОК FO openfiles / query / FO CSV

Чтобы скопировать вывод в буфер обмена, перенаправьте вывод в Clip.exe, как показано ниже. Затем вставьте результат в Блокнот или любой другой редактор по вашему выбору.

openfiles | клип

Найти, какой процесс заблокировал файл

openfiles / query / FO LIST | клип openfiles / query / FO CSV | клип

Найти, какой процесс заблокировал файл

Для получения дополнительной информации о копировании вывода командной строки в буфер обмена или сохранении вывода в файл, ознакомьтесь со статьей Как скопировать выходной текст командной строки в буфер обмена или сохранить в файл?

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

openfiles | findstr / i

Пример:

openfiles | findstr / i eiffel

Вышеупомянутая команда выводит список всех открытых файлов, которые содержат слово «eiffel» в имени файла. В этом примере в Word 2016 в настоящее время заблокирован файл «Эйфелева башня.docx» (ID 4576).

Найти, какой процесс заблокировал файл

И диалог «Используемый файл» говорит мне то же самое.

Найти, какой процесс заблокировал файл

Отключить файлы, открытые удаленно, из общей папки.

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

OPENFILES / Disconnect [/ S system [/ U username [/ P [password]]]] {[/ ID id] [/ A accessby] [/ O openmode]} [/ OP openfile] Описание: позволяет администратору отключать файлы и папки, которые были открыты удаленно через общую папку. Список параметров: / S system Указывает удаленную систему для подключения. / U [домен ] пользователь Задает контекст пользователя, в котором должна выполняться команда. / P [пароль] Задает пароль для данного пользовательского контекста. / ID id Указывает на отключение открытых файлов по идентификатору файла. Можно использовать подстановочный знак '*'. / A accessedby Указывает на отключение всех открытых файлов по значению accessedby. Можно использовать подстановочный знак '*'. / O openmode Указывает на отключение всех открытых файлов по значению openmode. Допустимые значения: чтение, запись или чтение / запись. Можно использовать подстановочный знак '*'. / OP openfile Указывает на отключение всех открытых файловых соединений, созданных с помощью определенного имени «открытый файл». Можно использовать подстановочный знак '*'. /? Отображает это справочное сообщение. Примеры: OPENFILES / Disconnect /? OPENFILES / Disconnect / ID 1 OPENFILES / Disconnect / Имя пользователя OPENFILES / Disconnect / O Read / Write OPENFILES / Disconnect / OP 'c:  My Documents  somedoc.doc' / ID 234 OPENFILES / Disconnect / S system / U username / ID 5 OPENFILES / Disconnect / S system / U username / P password / ID *

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

5. OpenedFilesView

OpenedFilesView от Nirsoft отображает список всех открытых файлов в вашей системе. Для каждого открытого файла отображается дополнительная информация: значение дескриптора, доступ для чтения / записи / удаления, позиция файла, процесс, открывший файл, и многое другое ... При желании вы также можете закрыть один или несколько открытых файлов или закрыть процесс, который открыл эти файлы.

Найти, какой процесс заблокировал файл

Вы можете закрыть процессы выбранных файлов или закрыть выбранные дескрипторы файлов. Номер дескриптора представлен в шестнадцатеричном формате, тогда как консольный инструмент openfiles.exe показывает его в обычном формате. Этот инструмент также позволяет добавить параметр контекстного меню, чтобы быстро найти процесс, который в настоящее время использует файл, с помощью меню, вызываемого правой кнопкой мыши. Я считаю, что опция контекстного меню / поддержка командной строки - одна из самых полезных функций, предлагаемых OpenedFilesView.


Одна небольшая просьба: если вам понравился этот пост, поделитесь им?

Одна «крошечная» публикация от вас серьезно помогла бы росту этого блога. Несколько отличных предложений:
  • Приколи это!
  • Поделитесь этим в своем любимом блоге + Facebook, Reddit
  • Твитнуть!
Так что большое спасибо за вашу поддержку, мой читатель. Это займет не более 10 секунд вашего времени. Кнопки «Поделиться» находятся прямо внизу. :)