- Вопрос или проблема
- Утилиты PowerToys от Microsoft – File Locksmith
- PowerShell в Windows 10
- Ответ или решение
- Как Windows может помочь определить, что использует ваш USB-накопитель?
- Введение
- Использование Sysinternals Process Explorer
- Прямое использование LockHunter
- Встроенный журнал событий Windows
- Использование PowerShell
- Использование Resource Monitor и Disk Management
- Заключение
Вопрос или проблема
Будучи хорошим гражданином, я щелкнул левую кнопку мыши на значке “Безопасное извлечение оборудования” на панели задач и выбрал свой USB-накопитель для демонтажа.
Затем я получаю сообщение:
Windows не может остановить ваш универсальный том, так как он используется. Закройте любые программы или окна, которые могут использовать это устройство, затем попробуйте позже.
Конечно, будучи операционной системой, она знает точно, какие приложения используют мое устройство. Так почему она не может сказать мне?
Или есть способ, с помощью которого я могу это выяснить?
Вы можете использовать Sysinternals Process Explorer, чтобы найти дескриптор для любых открытых файлов. Просто выберите меню Find
и выберите Find Handle or DLL
. В открывшемся диалоговом окне введите букву диска в поле поиска. Результаты поиска должны показать все открытые файлы с диска и какой процесс их имеет открытыми.
Быстрое решение: Установите LockHunter, затем щелкните правой кнопкой мыши на файле/папке/диске и выберите “Что блокирует это …?”
Нативный метод: Windows (по крайней мере, 10, насколько я знаю) создает запись в журнале событий, когда вы пытаетесь извлечь съемный диск и не можете, потому что процесс заблокировал его. Два идентификатора событий 225 покажут идентификатор процесса и имя процесса, ответственного за блокировку.
Пошагово:
-
Откройте “Журналы Windows”, затем “Система”
-
Щелкните правой кнопкой мыши на “Система” и выберите “Фильтровать текущий журнал”
-
В открывшемся диалоговом окне введите “225” (без кавычек) в поле “Все идентификаторы событий”
-
Вы увидите все события, связанные с невозможностью извлечения, потому что процесс блокировал диск.
-
Посмотрите на временные метки всех этих записей и выясните, какие из них относятся к фактическому времени, когда вы пытались извлечь диск.
-
Примите соответствующие меры. Завершение задачи корректным образом (закрытие программы, которая имеет блокировку) в большинстве случаев нормально. Остановка службы поиска Windows также допустима. Остановка сканирования антивируса должна быть допустима (если вы не подозреваете, что у вас есть вирусы). Заходить в диспетчер задач и завершать процесс может быть неуместно. Как с этим справляться, выходит за рамки этого вопроса.
-
(Сохранить вид…) в панели действий (в правом фрейме) вы можете “Сохранить фильтр в пользовательский вид…”, чтобы найти его в “Пользовательских представлениях” (в левом фрейме над “Журналами Windows”)
- Если у вас нет другой записи с именем процесса, системный процесс (идентификатор процесса 4) удерживает ваш диск. Чтобы обойти это, вам придется перейти в управление дисками и отключить диск, который вы хотите извлечь. Если файл находится на диске загрузки, вы не можете отключить его. В этом случае см. примечание ниже:
ОБНОВЛЕНИЕ 2018: Я видел приложения, такие как WhatsApp Desktop, удерживающее дескрипторы на Chrome Canary через системный процесс. Поскольку вы не можете извлечь загрузочный диск (из-за его использования), решением было использовать другую полезную утилиту Sysinternals, называемую Handle. После того как вы закроете программу, у которой есть заблокированный файл, запустите Handle и выполните (например) handle64 "Chrome SxS\Application\chrome.exe"
, чтобы проверить, остались ли дескрипторы на файле, который имеет блокировку PID 4. Путем проб и ошибок закройте каждую запущенную программу, пока не останется больше дескрипторов на заблокированном файле.
ОБНОВЛЕНИЕ 2022: Полезная утилита PowerToys от Microsoft теперь включает расширение для проверки, какой процесс блокирует файл/папку. Она называется File Locksmith и является бесплатной загрузкой. Хотя вы можете настроить, какую функцию PowerToy вы хотите включить, если это единственная, которую вы будете использовать, это избыточно. Лучше использовать специализированный инструмент для этой задачи.
Платный вариант (также работает отлично)
Скачайте и запустите SafelyRemove, от тех же людей, которые сделали LockHunter. Я не уверен, почему они берут деньги за SafelyRemove, когда их бесплатный LockHunter уже справляется с задачей. Но это помогает вам извлечь диск, а если это не удается, показывает, какие процессы его блокируют:
Вы также можете использовать командную строку для запроса журнала Windows, с помощью wevtutil.exe (с тех пор как Windows 7), зная, что Windows Kernel-PnP использует идентификатор события 225, чтобы записать отказ системы (всегда имея идентификатор процесса 4) удалить или извлечь устройство USB\VID_####&PID_############ (где #’s обозначают шестнадцатеричные числа).
wevtutil qe System /q:"*[System[(EventID=225)]]" /c:5 /f:text /rd:true
- qe System : запрос событий из журналов системы
- /q : запрос с помощью XPath
EventID=225
означает, что система отказалась от запроса на извлечение- /c:5 : количество записей для извлечения (5 здесь)
- /f:text : формат (по умолчанию xml)
- /rd:true : обратный порядок (новейшие в первую очередь)
Я использую это в пакетном сценарии.
Утилиты PowerToys от Microsoft – File Locksmith
MS PowerToys теперь имеет удобную утилиту, которая вероятно работает в большем количестве случаев File Locksmith
После включения просто щелкните правой кнопкой мыши на диске в проводнике и выберите Что использует этот файл?
PowerShell в Windows 10
Вот быстрая команда PowerShell, чтобы запросить журнал событий и показать, какое приложение блокирует извлечение диска (работает у меня с Windows 10, вероятно, работает и с 7/8)
Get-EventLog -LogName System -after (Get-Date).AddHours(-1) | Where-Object {$_.EventID -eq 225} | Sort-Object TimeGenerated | Format-Table -Wrap
Вывод покажет все случаи за последний час, когда система не смогла извлечь дисковый привод. Столбец Message показывает процесс, который блокировал извлечение. В моем примере ниже, диспетчер задач действительно был виновен, и я смог извлечь диск после закрытия диспетчера задач.
PS C:\Users\Jonathan> Get-EventLog -LogName System -after (Get-Date).AddHours(-1) | \Where-Object {$_.EventID -eq 225} | Sort-Object TimeGenerated | Format-Table -Wrap
Индекс Время ТипЗаписи Источник ИдентификаторЭкземпляра Сообщение
----- ---- --------- ------ ---------- -------
14692 07 сен 10:50 Предупреждение Microsoft-Windows-Ke 225 Приложение \Device\HarddiskVolume4\Windows\System32\Taskmgr.exe с идентификатором процесса 11972 остановило
rnel-PnP удаление или извлечение для устройства USB\VID_0781&PID_5575\200445301013C111B1A0.
14693 07 сен 10:50 Предупреждение Microsoft-Windows-Ke 225 Приложение \Device\HarddiskVolume4\Windows\System32\Taskmgr.exe с идентификатором процесса 11972 остановило
rnel-PnP удаление или извлечение для устройства USB\VID_0781&PID_5575\200445301013C111B1A0.
Вы можете запустить resmon.exe (через WIN+R), перейти на диск > Деятельность диска > Сортировка по файлу. Теперь вы можете видеть все файлы, к которым обращается система, и какие процессы обращаются к ним, упорядоченные по пути файла (который, кстати, начинается с буквы диска). Это может не сработать во всех случаях, но это простой подход.
Перезапуск компьютера, похоже, “освобождает” использование устройства. Также для более быстрого извлечения вы можете отключить кэширование Windows в разделе оборудования вашего устройства, иногда Windows будет тратить больше времени, чем ожидается, на сброс кэша на внешний диск и отобразит сообщение, что устройство используется (поскольку оно будет использоваться самой Windows)
Для меня (Windows 7).
-
Нажмите клавишу Windows
-
В “поиске программ и файлов” введите: diskmgmt.msc
-
В списке поиска найдите запись и щелкните правой кнопкой мыши. Выберите Запуск от имени администратора
-
Введите учетные данные системного администратора, чтобы запустить “Управление дисками” (если требуется)
-
Найдите USB-диск, который не извлекается в списке дисков
-
В левом панеле щелкните правой кнопкой мыши и выберите “Извлечь“
-
Дескрипторы “должны” закрыться. Вы всегда можете проверить это в Sysinternals‘ Process Explorer
Примечание: Значок на панели задач “Безопасно извлечь оборудование и извлечь носитель” теперь не показывает USB-диск, только три точки
-
Физически извлеките диск
Если вы используете PowerShell Core (PowerShell 7), вы можете использовать следующее (ограничено 5 последними событиями для удобочитаемости):
Get-WinEvent -MaxEvents 5 -FilterHashtable @{LogName="System";Id=225} | Format-Table -Wrap
Это похоже на ответ Джона, но Get-EventLog
является частью старого Win32 API и не поддерживается в PowerShell Core. Get-WinEvent
автоматически сортирует хронологически (по убыванию), поэтому дополнительная сортировка не требуется.
Если вы откроете “Мой компьютер” и ваш диск не отображается под заголовками “Съемное хранилище”, то Windows, по какой-то причине, рассматривает его как фиксированный системный ресурс. Вам придется размонтировать любые разделы на диске.
Если это так, откройте “Управление компьютером”, затем перейдите в “Управление дисками”. Для каждого раздела на устройстве щелкните правой кнопкой мыши на разделе, выберите “Изменить буквы дисков и пути” и удалите любые буквы диска, назначенные этому разделу. После этого вы должны обнаружить, что функция “безопасного извлечения” работает, как вы и надеялись.
Я пробовал это, используя Windows 10.
Откройте Монитор ресурсов, либо найдя его в меню “Пуск” “Введите здесь для поиска”, либо через Диспетчер задач (щелкните правой кнопкой мыши на панели задач и затем нажмите “Диспетчер задач”, чтобы открыть его).
В Мониторе ресурсов столбец, названный image, используется для отображения имени процесса, а столбец, названный File, может использоваться для проверки, использует ли процесс ваш диск. Например, адрес файла будет F:/foo/bar.tmp
, тогда если ваш подключенный USB-диск имеет букву диска F:, вы можете завершить этот процесс. Столбец, названный PID, показывает идентификатор процесса.
Чтобы завершить процесс: введите в CMD или Командной строке taskkill /F /PID pid_number
Хотя это не технически является ответом на поставленный вопрос, это, вероятно, решение фактического вопроса, с которым многие люди приходят сюда, учитывая голоса за этот комментарий: “Диспетчер задач Windows 10 также может предотвращать извлечение! Кто бы мог подумать. – Алекс Че”
Как в закрыть Диспетчер задач и попробовать снова извлечь USB-накопитель.
По крайней мере, это решило мою проблему и, вероятно, решило проблему как минимум еще 32 человек на момент написания этого.
У меня был USB-диск, который Windows сообщал как используемый…так же, как и у всех остальных здесь.
В Windows 10, Ctrl + Alt + Del открывает Диспетчер задач.
Найдите его, прокручивая – Проводник Windows. и выделите.
В правом нижнем углу есть красивенная дружелюбная кнопка под названием “Перезапустить процесс”
Дважды проверьте, чтобы “Проводник Windows” был единственным выделенным элементом.
Левой кнопкой мыши щелкните на дружелюбной кнопке “Перезапустить процесс”.
У меня был только один Проводник, а у других иногда их два. Просто обратите внимание, какой из них вернется. Попробуйте закрыть/извлечь USB-диск. У меня все получилось; закройте USB.
Если ваш диск не извлекается/закрывается, то, вероятно, это был другой Проводник. Попробуйте снова и перезапустите тот. Удачи.
Ответ или решение
Как Windows может помочь определить, что использует ваш USB-накопитель?
Введение
Вам когда-нибудь приходилось сталкиваться с ситуацией, когда Windows не позволяет безопасно удалить USB-накопитель? Сообщение об ошибке, которое вы получаете, указывает на то, что какое-то приложение или процесс в данный момент использует ваш накопитель. Но как узнать, что именно мешает безопасной дисконнекции? В этом материале мы разберем несколько методов, которые помогут вам определить, какие приложения или процессы блокируют ваш USB-накопитель, и как можно их освободить.
Использование Sysinternals Process Explorer
Одним из самых мощных инструментов для решения данной задачи является Process Explorer от Sysinternals.
- Скачайте и запустите Process Explorer.
- Перейдите в меню Find и выберите опцию Find Handle or DLL.
- В появившемся диалоговом окне введите букву вашего USB-диска (например, D:).
- Результаты поиска покажут все открытые файлы с вашего накопителя и соответствующие процессы, которые их используют.
Это один из наиболее прямых способов получить информацию о блокирующих процессах.
Прямое использование LockHunter
Еще одним эффективным инструментом является LockHunter, который можно установить и использовать для быстрого поиска блокировок:
- Щелкните правой кнопкой мыши на файле или папке на вашем USB-накопителе.
- Выберите опцию What’s locking this…?.
- LockHunter предоставит список процессов, которые используют данный файл.
Эта утилита предлагает интуитивно понятный интерфейс и упрощает процесс поиска.
Встроенный журнал событий Windows
Windows 10 и более поздние версии ведут журнал событий, который содержит информацию о неудачных попытках отключения USB-накопителей.
- Запустите Event Viewer (Просмотр событий).
- Перейдите к разделу Windows Logs → System.
- Щелкните правой кнопкой мыши на System и выберите Filter Current Log.
- Введите 225 в поле All Event IDs.
- Просмотрите записи, связанные с попытками отключения накопителя, и обратите внимание на процесс, который блокирует операцию.
Использование PowerShell
Для более опытных пользователей PowerShell может помочь вам быстро определить блокирующий процесс с помощью следующей команды:
Get-EventLog -LogName System -after (Get-Date).AddHours(-1) | Where-Object {$_.EventID -eq 225} | Sort-Object TimeGenerated | Format-Table -Wrap
Этот метод позволяет отфильтровать записи за последний час и выявить, какой процесс мешал безопасному удалению.
Использование Resource Monitor и Disk Management
Вы также можете использовать Resource Monitor для отображения всех активных процессов, использующих ваш USB-накопитель:
- Запустите Resource Monitor (resmon.exe).
- Перейдите в раздел Disk и отсортируйте по столбцу File.
- Найдите файлы, которые относятся к вашему USB-накопителю, и посмотрите процесс, который их использует.
Если ни один из методов не помог и накопитель по-прежнему блокируется, вы можете использовать Disk Management для принудительного отключения устройства:
- Откройте Disk Management (diskmgmt.msc).
- Найдите ваш USB-накопитель, щелкните правой кнопкой мыши и выберите Eject.
Заключение
Хотя Windows не сообщает напрямую, какие процессы блокируют ваш USB-накопитель, существуют различные инструменты и методы, с помощью которых вы можете выяснить эту информацию и освободить устройство для безопасного извлечения. Самые эффективные из них включают использование утилит Sysinternals, LockHunter и встроенных функций Windows. Не забывайте о том, что в некоторых случаях просто перезагрузка компьютера может освободить блокировку на накопителе, делая процесс извлечения значительно легче.