Узнайте, какой процесс блокирует файл или папку в Windows

717

Как я могу узнать, какой процесс блокирует файл или папку в Windows?

Например, при попытке удалить папку Windows сообщает об этом:

Действие не может быть завершено, потому что папка открыта в другой программе

Происходит то же самое с файлом, но как мне узнать, какая программа или приложение использует его в настоящее время и не позволяет мне удалить файл или папку?

leeand00
источник
5
Смотрите этот вопрос ServerFault .
Джон Фухи
1
Является ли ваш файл видео? Вы можете обнаружить, что Windows Explorer сам «использует» файл ...
DisgruntledGoat
37
Как это дубликат? Он специально спрашивает, как узнать, какой процесс блокирует файл, а не как удалить заблокированный файл.
b1nary.atr0phy
8
Я не могу добавить встроенный, более простой ответ, потому что он был неправильно помечен как дублирование, и я не могу добавить его в другой поток, потому что это относится только к XP. Но в любом случае, для версий Windows с Resource Monitor (введите его в строке поиска), перейдите на вкладку CPU / Associated Handles, а затем найдите файл или папку.
Jontyc
Я узнал, что в Windows 10 (и я предполагаю, что уже в Windows 7) есть программа под названием Resource Monitor, которая позволяет увидеть, какие процессы блокируют файл или папку: stackoverflow.com/a/24126882/470749
Райан,

Ответы:

66

Метод PowerShell:

IF((Test-Path -Path $FileOrFolderPath) -eq $false) {
    Write-Warning "File or directory does not exist."       
}
Else {
    $LockingProcess = CMD /C "openfiles /query /fo table | find /I ""$FileOrFolderPath"""
    Write-Host $LockingProcess
}

В openfilesкоманде должна быть включена поддержка локальных файлов при запуске openfiles /local onи перезапуске.

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

откровенный
источник
12
Функция должна быть сначала включена сopenfiles /local on
mstrange
6
К сожалению, openfilesкажется, не работает на 64-битной Windows:ERROR: The target system must be running a 32 bit OS.
Томас С.
1
Работает на Win10 64 для меня
Майкл
3
Похоже, вы могли бы добиться этого в чистом cmd с openfiles /query /fo table | find /I "<path>"?
mwfearnley
1
... Если мы хотим перезапустить, чтобы включить что-то, почему бы нам просто не перезапустить, чтобы получить доступ к папке? Я не понимаю, как это решило проблему OP, когда «просто перезагрузить компьютер» было бы намного проще и все же потребовать перезагрузки.
Ник Хартли
692

Для этого вы можете использовать Resource Monitor, который встроен в Windows 7, 8 и 10.

  1. Откройте Resource Monitor , который можно найти
    • Выполнив поиск Resource Monitor или resmon.exe в меню «Пуск», или
    • Как кнопка на вкладке « Производительность » в вашем диспетчере задач
  2. Перейти на вкладку CPU
  3. Используйте поле поиска в разделе « Связанные дескрипторы »
    • Смотрите синюю стрелку на снимке экрана ниже

Найдя дескриптор, вы можете определить процесс, посмотрев на столбец «Изображение» и / или «PID».

Затем вы можете попытаться закрыть приложение, как обычно, или, если это невозможно, просто щелкнуть правой кнопкой мыши по дескриптору и завершить процесс прямо оттуда. Очень просто!

Скриншот монитора ресурсов

Svish
источник
18
Примечание. Монитор ресурсов не обнаружил никаких связанных дескрипторов в моем случае, а Process Explorer (как описано выше ) обнаружил .
ComFreek
15
@ComFreek Ну, ProcessExplorer может быть более мощным во многих случаях, но для меня Resource Monitor всегда находил приложение, блокирующее файл, с которым я пытаюсь что-то сделать. Я также предпочитаю его Process Explorer просто потому, что он прямо там, в ОС. Нет необходимости в дополнительной загрузке и дополнительном ярлыке где-либо.
Свиш
8
Я не смог найти это в Process Explorer, но было легко найти эти инструкции в Resource Manager. Благодарю.
Татьяна Рачева
6
@ComFreek В моем случае это был просто другой случай: Process Explorer не нашел дескриптор, в то время как Resource Monitor сделал.
Уве Кейм
9
+1 - это также отлично работает на Windows 10
Мэтт Иннес
390

Пара вариантов:

Microsoft / SysInternals Process Explorer - выберите «Найти»> «Найти дескриптор» или «DLL». В текстовом поле «Обрабатывать или подстрока DLL:» введите путь к файлу (например, «C: \ path \ to \ file.txt») и нажмите «Поиск». Все процессы, которые имеют открытый дескриптор этого файла, должны быть перечислены.

WhoLockMe - расширение для проводника, которое добавляет контекстное меню

NB WhoLockMe по- видимому, не работает с Win 10 ( по крайней мере , я не смог зарегистрировать его с любым из 32- или 64-разрядных версий regsvr32.exe).

Shevek
источник
26
В Windows 7, если вы попытаетесь удалить заблокированный файл, в сообщении об ошибке будет указано, какой процесс заблокирован
Garry English
10
ПРИМЕЧАНИЕ: Unlocker устанавливает Adware, если вы не будете осторожны. С их сайта: «Рекламная функция: полностью дополнительная панель инструментов Delta».
Джулиан Найт
11
@GarryEnglish почему-то это не всегда так. Мне просто нужно было использовать procxp, чтобы сказать, что notepad ++ заблокировал папку. Windows 7 не смогла сказать мне виновника.
GuiSim
4
@ jpmc26 Нет. WhoLockMe не работает в Windows 7.
Ceving
3
@ GarryEnglish - Как заявляет GuiSim, это точно не всегда так, и, по моему опыту, так бывает редко.
dgo
196

Посмотрите на Process Explorer ( procexp.exe).

Из его введения:

Задумывались ли вы, какая программа имеет определенный файл или каталог открыт? Теперь вы можете узнать.

Чтобы узнать, какой процесс использует определенный файл, выполните следующие действия:

  1. Зайдите в Find , Find Handle или DLL .. или просто нажмите Ctrl+ F.

    Введите описание изображения здесь

  2. Введите имя файла и нажмите Поиск .

    Введите описание изображения здесь

  3. Process Explorer перечислит все процессы, которые имеют дескриптор открытого файла. Нажмите на запись, чтобы сфокусировать процесс в главном окне.

    Введите описание изображения здесь

  4. При желании вы можете даже закрыть ручку вручную через нижнюю панель ( Ctrl+ L):

    Введите описание изображения здесь

Eroen
источник
6
Process Hacker также может это сделать.
Бенуа
5
В другом ответе упоминается, что Handle - это инструмент командной строки от SysInternals, который также выполнит эту задачу.
тяжело
Я забыл открыть процесс cmd в папке, проводник процессов помог мне заметить это.
Даведжал
Примечание для Google, текущая версия PE больше не поддерживает Close Handle
MickyD
Не удалось работать в Win10 64-bit 1709
K7AAY
30

LockHunter может разблокировать любые обработчики, которые могли заблокировать ваши файлы или папки. В отличие от аналогичных бесплатных программ, он поддерживает как 32-разрядные, так и 64-разрядные версии Windows.

Это бесплатный инструмент для удаления файлов, заблокированных тем, что вы не знаете. LockHunter полезен для борьбы с вредоносными программами и другими программами, которые блокируют файлы без причины. В отличие от других подобных инструментов, он удаляет файлы в корзину, поэтому вы можете восстановить их, если удалили по ошибке.

  • Показывает процессы, блокирующие файл или папку
  • Позволяет разблокировать, удалить, скопировать или переименовать заблокированный файл
  • Позволяет убить процесс блокировки
  • Позволяет удалить процессы блокировки с жесткого диска
  • Интегрируется в меню Проводника
  • Он удаляет файлы в корзину, поэтому вы можете восстановить их, если удалили по ошибке
  • Поддерживает как 32, так и 64-битную Windows
Мехпер С. Палавузлар
источник
5
Два верхних ответа не сработали, а следующие, получившие отказ, были либо заблокированы моим брандмауэром, либо предупреждены о том, что мой хром не может перейти к ним. LockHunter работал отлично.
user3885927
1
Охотник на удачу работал на меня, а другие нет
SheldonH
Этот работает.
jdhao
10

EMCO UnlockIT может идентифицировать процесс, который заблокировал файл, а также разблокировать файл, чтобы вы могли удалить / отредактировать / переместить его. Программа полностью бесплатна, хотя более новая версия немного медленнее и более раздутая, чем оригинал (который имел простой, некорпорированный графический интерфейс, но загружался практически мгновенно и без раздражающего заставки). Кроме того, исходная версия использовалась для автоматического всплывающего сообщения при возникновении упомянутой ошибки, что позволяет мгновенно разблокировать файл и выполнить операцию, которую вы пытались выполнить.

Тем не менее, UnlockIT - невероятно полезная программа, которая предоставляет базовую функциональность, которая критически отсутствует в Windows. Это один из стандартных наборов утилит, который я устанавливаю на все компьютеры с Windows, на которых работаю.

Lèse Majesté
источник
@Джон: Ну, он идентифицирует программу, которая заблокировала файл. И вы все равно можете вручную убить процесс через диспетчер задач. Однако обычно проще просто разблокировать файл (особенно если это проводник, который блокировал файл большую часть времени) вместо того, чтобы уничтожить процесс, который заблокировал его (обычно из-за обращения к файлу и оставления обработчика файла открытым из-за глюка программы).
Lèse Majesté
2

Здесь было мое открытие и решение.

Кстати, ни один из приведенных выше ответов не решил мою проблему.

Я даже пытался использовать UNLOCKER, который оказался бесполезным.

У меня проблема была с Memeo Autosync Backup

По-видимому, этот процесс резервного копирования оставляет достаточно «призрачного файла». Этот «призрачный файл» появлялся всякий раз, когда я запускал ALT-TAB на моем компьютере (Windows Professional XP), то есть я видел ДВА программы MS Excel, работающие, когда у меня была только ОДНА видимая, на панели задач.

Я столкнулся с этим решением, когда подумал, что это может быть защита от вирусов SYMANTEC Endpoint (Anti-Virus); и отключил программу. Тем не менее, я продолжал получать сообщение об ошибке:

невозможно удалить (файл LARGE.xls): он используется другим пользователем или программой. Закройте все программы, которые могут использовать этот файл, и повторите попытку.

Впоследствии я продолжал видеть уведомление Memeo о «синхронизации» и выход из программы.

Впоследствии НЕТ ОШИБКИ.

Для вас это может быть ЛЮБОЙ из этих фоновых сейвов.

ранее разочарованный пользователь Excel
источник
2

Если вы не знаете в программе, какой файл он использует, вы можете перейти на «Мой компьютер»; щелкните правой кнопкой мыши; выберите Управление. В разделе «Системные инструменты»> «Общие папки»> «Открыть файлы» вы сможете увидеть пользователя, заблокировавшего файл. Вы можете закрыть файл отсюда, а затем вы можете выполнить задачу переименования или удаления файла. Надеюсь это поможет

Раджеш
источник
1
Это будет работать только для общих папок.
sweetfa
1

Дополнительная возможность, просто чтобы сэкономить людям время, которое я только что провел:

В более старых версиях Windows может появиться сообщение «Отказано в доступе - возможно, у вас нет прав или файл используется». Если вы обнаружите через Process Explorer, что файлы, на самом деле, никем не открыты, есть вероятность, что существует проблема с безопасностью. Используя учетную запись администратора, выберите файлы в проводнике, щелкните правой кнопкой мыши и выберите «Свойства», «Безопасность», «Дополнительно», «Владелец». Скорее всего, файлы принадлежат учетной записи, которая больше не существует или более не может быть проверена на существование (из-за изменения параметров доверия Active Directory).

Измените право собственности на Администраторов, и вы готовы к работе.

Stu
источник
0

Многие программы здесь устарели. Я, наконец, в итоге использовал OpenDFilesView от nirsoft, который работал очень хорошо.

Скриншот

Хотя лучшая часть - интеграция меню проводника, которую легко включить. Согласно веб-сайту

Контекстное меню Проводника

Начиная с версии 1.10, вы можете запускать OpenedFilesView непосредственно из проводника Windows и просматривать только дескрипторы файла или папки, которые вы хотите проверить. Чтобы включить эту функцию, проверьте «Включить контекстное меню проводника» в меню «Параметры». После включения этой функции вы можете щелкнуть правой кнопкой мыши любой файл или папку в проводнике Windows и выбрать в меню пункт «OpenedFilesView». Если вы запустите опцию OpenedFilesView для папки, она отобразит все открытые файлы в этой папке. Если вы запустите опцию OpenedFilesView для файла, он отобразит все открытые дескрипторы для этого файла.

контекстное меню

Этот инструмент по-прежнему надежно работает в 2019 году

Виджай
источник