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

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

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

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

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

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

$config[ads_text6] not found

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

Мы рассмотрели Resource Monitor ранее. Проверьте эти статьи:

  • Как использовать Resource Monitor, чтобы найти, какой процесс заблокировал файл?
  • Какая программа использует всю вашу пропускную способность интернета? Используйте Resource Monitor, чтобы найти его

2. Process Explorer

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

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

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

Проверьте эти связанные статьи Process Explorer:

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

3. Ручка от Windows Sysinternals

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

Примечание. В дескрипторе v4.21 имеется небольшая ошибка, из-за которой он всегда сообщает «Не найдено подходящих дескрипторов», если буква диска указана в верхнем регистре. Надеюсь, что Microsoft исправит это в следующем обновлении.

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

 handle.exe -a -u filename_with_path 

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

Пример:

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

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

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

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

 использование: дескриптор [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [имя] [-nobanner] 
-aСбросить всю информацию о ручках.
-lПросто покажите маркеры разделов на основе файла подкачки.
Закрывает указанный дескриптор (интерпретируется как шестнадцатеричное число).

Вы должны указать процесс по его PID. ПРЕДУПРЕЖДЕНИЕ. Закрытие дескрипторов может вызвать нестабильность приложения или системы.

-yНе запрашивать подтверждение закрытой ручки.
-sПечать счетчика каждого типа открытой ручки.
-uПоказывать имя пользователя-владельца при поиске дескрипторов.
-пДамп-дескрипторы, принадлежащие процессу (частичное имя принято).
названиеПоиск дескрипторов объектов с (фрагмент принят).
-nobannerНе отображать баннер запуска и сообщение об авторских правах.

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

$config[ads_text6] not found

Добавить дескриптор Sysinternals в контекстное меню

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

  1. Загрузите Handle с сайта Microsoft Sysinternals.
  2. Скопируйте файлы handle.exe & handle64.exe в папку - например, d:\tools
  3. Скопируйте следующие строки кода в Блокнот и сохраните файл как find_handle.vbs в постоянном месте.
     'Запускает утилиту Sysinternals Handle.exe с аргументом имени файла. '© Ramesh Srinivasan - //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 Тогда sBaseKey = "HKCU \ Software \ Классы \ * \ shell \ "WshShell.RegWrite sBaseKey &" FindHandle \ ", " Find Handle ", " REG_SZ "WshShell.RegWrite sBaseKey &" FindHandle \ command \ ", " wscript.exe "&" "" "& _ WScript .ScriptFullName & "" "" & "" & "" "" & "% 1" & "" "", "REG_SZ" Иначе Если objFSO.FileExists (WScript.Arguments (0)) = True Тогда sFilename = lcase (WScript .Arguments (0)) objShell.ShellExecute "cmd.exe", "/kd:\tools\handle.exe -a -u" & _ "" "& sFilename &" "" ", " ", " runas ", 1 End If End If 

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

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

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

 HKEY_CURRENT_USER \ Software \ Classes \ * \ Shell \ FindHandle 

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

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

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

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

 openfiles / local on 

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

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

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

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

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

 openfiles 

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

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

 openfiles / запрос / FO LIST openfiles / запрос / FO CSV 

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

 openfiles | клип 

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

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

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

 открытые файлы | findstr / i 

Пример:

 открытые файлы | findstr / i eiffel 

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

$config[ads_text6] not found

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

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

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

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

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

5. OpenedFilesView

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

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

ПОХОЖИЕ СТАТЬИ