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

click fraud protection

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

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

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

Для исследования процессов и заблокированных файлов 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:

  • Как удалить неподдающийся удалению файл или папку в Windows?
  • Найдите, какая программа использует вашу веб-камеру в настоящее время
  • Как узнать, какая программа вызвала неизвестное сообщение об ошибке?
  • Что означает «Не удалось перечислить объекты в контейнере»?

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. Тусклый objShell, WshShell, objFSO, sBaseKey, sFilename. Установите objShell = CreateObject ("Shell. Применение") Установите WshShell = CreateObject ("WScript. Оболочка") Установите objFSO = CreateObject ("Scripting. FileSystemObject ") Если WScript. Аргументы. Count = 0 Тогда sBaseKey = "HKCU \ Software \ Classes \ * \ shell \" WshShell. RegWrite sBaseKey & "FindHandle \", "Найти дескриптор", "REG_SZ" WshShell. Запишите sBaseKey & "FindHandle \ command \", "wscript.exe" & & _ WScript. ScriptFullName & & "" & & "% 1" &, "REG_SZ" Иначе, если objFSO.FileExists (WScript. Аргументы (0)) = True Тогда sFilename = lcase (WScript. Аргументы (0)) objShell. ShellExecute "cmd.exe", "/ k d: \ tools \ handle.exe -a -u" & _ & sFilename &, "", "runas", 1 End If. Конец, если

    Примечание: Путь 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 | clip. openfiles / query / FO CSV | клип
Найти, какой процесс заблокировал файл

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

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

openfiles | findstr / i 

Пример:

openfiles | findstr / i eiffel

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

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

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

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

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

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

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 /Я БЫ *

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

5. OpenedFilesView

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

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

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


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

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

Эзойскийпожаловаться на это объявление