Коли ви намагаєтеся видалити файл або папку, які використовуються процесом, з’являється діалогове вікно «Файл, що використовується» з назвою програми, яка заблокувала файл.
Однак бувають випадки, коли діалогове вікно «Використовуваний файл» не показує назву процесу, який блокує файл, який ви намагаєтеся видалити. У деяких випадках у діалоговому вікні відображатиметься «дія не може бути завершена, оскільки файл відкритий у інший процес“.
Для дослідження процесів і заблокованих файлів Windows Sysinternals Process Explorer, ймовірно, є першим варіантом, який спадає на думку більшості користувачів. Однак є два вбудовані рішення щоб відобразити поточний список відкритих файлів разом із відповідними іменами процесів.
Знайдіть процес, який заблокував файл за допомогою:
- Монітор ресурсів (resmon.exe)
- Провідник процесів від Microsoft Sysinternals
-
Ручка з Microsoft Sysinternals
- Знайдіть дескриптор файлу через меню правою кнопкою миші
-
Вбудований консольний інструмент Openfiles.exe
- Увімкнути відстеження локальних дескрипторів файлів
- Перегляд відкритих файлів і відповідних назв процесів
- Від’єднайте файли, відкриті зі спільних папок
- OpenedFilesView з Nirsoft.net (третя сторона)
1. Монітор ресурсів
Монітор ресурсів (resmon.exe) — це вбудований інструмент, який має багато корисних функцій. За допомогою Resource Monitor ви можете відстежувати поточне використання мережі та Інтернету, переглянути пов’язані дескриптори для заблоковані файли, а також керувати процесами так само, як за допомогою диспетчера завдань.
Щоб знайти ім’я процесу, який має заблокований файл, клацніть вкладку ЦП, введіть ім’я файлу або його частину в текстовому полі «Пов’язані ручки».
Раніше ми розглядали Resource Monitor. Перегляньте ці статті:
- Як за допомогою монітора ресурсів знайти, який процес заблокував файл?
- Яка програма використовує всю вашу пропускну здатність Інтернету? Використовуйте монітор ресурсів, щоб знайти його
2. Провідник процесів
Провідник процесів не потребує представлення. У Process Explorer все, що вам потрібно зробити, це скористатися функцією пошуку та ввести ім’я файлу. Це показує процес, який здійснює доступ до файлу.
У нижній панелі ви можете закрити дескриптор файлу, якщо це необхідно.
Ви повинні запустити Process Explorer від імені адміністратора, щоб керувати процесами, які запущені з підвищеними можливостями. Щоб підняти Process Explorer, натисніть меню Файл → Показати деталі для всіх процесів.
Перегляньте ці статті, пов’язані з Process Explorer:
- Як видалити впертий невидальний файл або папку в Windows?
- Знайдіть, яка програма зараз використовує вашу веб-камеру
- Як дізнатися, яка програма викликала невідоме повідомлення про помилку?
- Що означає «Не вдалося перерахувати об’єкти в контейнері»?
3. Обробка з Windows Sysinternals
Ручка — це утиліта від Microsoft Sysinternals, яка відображає інформацію про відкриті дескриптори для будь-якого процесу в системі. Ви можете використовувати його, щоб побачити програми, у яких відкритий файл, або побачити типи об’єктів та імена всіх дескрипторів програми. Handle схожий на версію командного рядка Провідник процесів.
Примітка: Handle v4.21 має a маленька помилка де він завжди повідомляє «Не знайдено відповідних маркерів», якщо літера диска у верхньому регістрі. Сподіваюся, Microsoft виправить це в наступному оновленні.
Від ан Командний рядок адміністратора вікно, використовуйте синтаксис командного рядка, щоб знайти процес, який відкриває файл:
handle.exe -a -u ім'я файлу_з_шляхом
Якщо ім’я файлу містить пробіли, візьміть його в подвійні лапки.
приклад:
handle.exe -a -u "c:\users\ramesh\desktop\Mandate-form.pdf"
(Згадка імені файлу без шляху може не обов’язково працювати в кожній ситуації. Бажано завжди включати повний шлях.)
Вихід показує ім’я процесу, ідентифікатор процесу, ім’я користувача, ім’я заблокованого (цільового) файлу з шляхом.
Sysinternals Handle: аргументи командного рядка
використання: handle [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [ім'я] [-nobanner]
-а | Скиньте всю інформацію про дескриптор. |
-л | Просто покажіть дескриптори розділів із підтримкою файлів сторінки. |
-c | Закриває вказаний дескриптор (інтерпретується як шістнадцяткове число). Ви повинні вказати процес за його PID. ПОПЕРЕДЖЕННЯ: закриття маркерів може спричинити нестабільність програми або системи. |
-у | Не запитуйте підтвердження закриття дескриптора. |
-s | Кількість роздруківок кожного типу відкритих ручок. |
-u | Показувати ім’я користувача-власника під час пошуку маркерів. |
-стр | Дескриптори дампу, що належать до процесу (приймається часткова назва). |
ім'я | Пошук дескрипторів об’єктів за допомогою |
-нобанер | Не відображайте банер запуску та повідомлення про авторські права. |
Жодні аргументи не скинуть усі посилання на файли.
Додайте дескриптор Sysinternals до меню правою кнопкою миші
Ви можете додати Sysinternals Handle до меню правою кнопкою миші для файлів, щоб швидко знайти програму, яка заблокувала файл. Щоб додати його до контекстного меню, виконайте такі дії:
- Завантажити Ручка із сайту Microsoft Sysinternals.
- Скопіюйте файли handle.exe & handle64.exe до папки – напр.,
d:\інструменти
- Скопіюйте наступні рядки коду в Блокнот і збережіть файл як
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. Заява") Встановіть WshShell = CreateObject("WScript. оболонка") Встановіть objFSO = CreateObject("Сценарії. FileSystemObject") Якщо WScript. Аргументи. Count = 0 Тоді sBaseKey = "HKCU\Software\Classes\*\shell\" WshShell. RegWrite sBaseKey & "FindHandle\", "Find Handle", "REG_SZ" WshShell. RegWrite 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:\tools\handle.exe
у наведеному вище сценарії. Якщо програма розташована на іншому шляху, відповідно змініть шлях у скрипті. Для 64-розрядної Windows ви можете використовувати будь-яку handle.exe або handle64.exe - Подвійне клацання
find_handle.vbs
щоб додати запис контекстного меню в реєстр. Вам потрібно буде зробити це лише один раз. Але якщо ви перемістите сценарій в іншу папку, вам потрібно буде двічі клацнути його знову, щоб оновити шлях у реєстрі. - Ви побачите Знайти ручку варіант, коли ви клацнете правою кнопкою миші на файлі. При натисканні на нього запуститься сценарій, який, у свою чергу, запускає 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 з файлу Командний рядок адміністратора вікно, введіть:
відкриті файли
Тут перелічено ідентифікатор файлу/дескриптора, ім’я процесу та список файлів, відкритих локально або віддалено через локальні точки спільного доступу, у форматі таблиці.
Щоб переглянути вихідні дані у форматах списку або CSV, використовуйте параметр /query.
openfiles /query /FO LIST. openfiles /запит /FO CSV
Щоб скопіювати вихідні дані в буфер обміну, передайте їх у Clip.exe, як показано нижче. Потім вставте результат у Блокнот або будь-який інший редактор на ваш вибір.
відкриті файли | кліп
openfiles /query /FO LIST |кліп. openfiles /query /FO CSV |кліп
Щоб отримати додаткові відомості про копіювання виводу командного рядка в буфер обміну або збереження результату у файл, перегляньте статтю Як скопіювати вихідний текст командного рядка в буфер обміну або зберегти у файл?
Щоб дізнатися, чи використовується певний файл програмою (і знати, яка програма), ви можете використовувати наступний командний рядок.
відкриті файли | findstr /i
приклад:
відкриті файли | findstr /i eiffel
Наведена вище команда перераховує всі відкриті файли, які містять слово «eiffel» у назві файлу. У цьому прикладі Word 2016 зараз блокує файл «Ейфелева вежа.docx» (ідентифікатор 4576).
І діалогове вікно «Файл у використанні» говорить мені те саме.
Від’єднайте файли, відкриті віддалено, зі спільної папки.
Щоб відключити файли, відкриті зі спільної папки, щоб ви могли видалити, перейменувати файл або змінити вміст, скористайтеся /disconnect
параметр, щоб розірвати підключення до цього файлу. Ось параметри командного рядка.
OPENFILES /Від'єднати [/S систему [/U ім'я користувача [/P [пароль]]]] {[/ID id] [/A доступ до] [/O відкритий режим]} [/OP відкритий файл] Опис: дозволяє адміністратору від’єднувати файли та папки, які були відкриті віддалено через спільний доступ папку. Список параметрів: /S system Вказує віддалену систему для підключення. /U [домен\]користувач Вказує контекст користувача, під яким має виконуватися команда. /P [пароль] Вказує пароль для даного контексту користувача. /ID id Вказує на відключення відкритих файлів за ідентифікатором файлу. Можна використовувати символ «*». /A accessedby Вказує на відключення всіх відкритих файлів за значенням «accessedby». Можна використовувати символ «*». /O openmode Вказує на відключення всіх відкритих файлів за значенням "openmode". Допустимі значення: Read, Write або Read/Write. Можна використовувати символ «*». /OP openfile Вказує на відключення всіх відкритих з'єднань файлів, створених під певним ім'ям «відкритий файл». Можна використовувати символ «*». /? Відображає це повідомлення довідки. Приклади: OPENFILES /Disconnect /? OPENFILES /Від'єднати /ID 1 OPENFILES /Відключити /Ім'я користувача OPENFILES /Відключити /O Читання/Запис OPENFILES /Відключення /OP "c:\My Documents\somedoc.doc" /ID 234 OPENFILES /Відключити /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
- Твіттер!