Handle.exe или как разблокировать файл

Думаю нет среди моих читателей человека, который не сталкивался бы с проблемой файлов “залоченных” другими процессами. Ситуация вобщем то простая, и естественная – программа, для работы с файлом, открывает его с доступом на запись, или для монопольного чтения. Подробности наверное интерисуют лишь программистов, а нам важно понять что за процесс открыл этот файл, и как его освободить. Для этого я обычно использую утилиту от SysinternalsHandle.exe.

К примеру, захотелось мне удалить один файлик…

PS Q:\temp> del .\wlan-870isr.pdf
Remove-Item : Cannot remove item Q:\temp\wlan-870isr.pdf: 
The process cannot access the file 'Q:\temp\wlan-870isr.pdf'
because it is being used by another process.

Не очень приятная ситуация, особенно если удалить файл очень надо, а процесс который его открыл – неизвестен. Ничего страшного, просто скармливаем имя файла (или его часть) утилите:

PS Q:\temp> handle wlan-870isr.pdf

Handle v3.41
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

AcroRd32.exe       pid: 3656    278: Q:\temp\wlan-870isr.pdf

Вот теперь нам известен виновник! Можно конечно просто завершить процесс Acrobat Reader’а, и все открытые им файлы будут освобождены:

PS Q:\temp> Stop-Process -Id 3656 -WhatIf
What if: Performing operation "Stop-Process" on Target "AcroRd32 (3656)".

Но что если мы не хотим завершать процесс, но при этом уверены что файл этой программе не нужен и она просто забыла его закрыть? Можно просто принудительно закрыть ссылку на файл (handle). Разумеется этого делать не рекомендуется если вы не уверены что всё кончится хорошо. Программа будет предполагать что файл всё еще открыт ею, и это может привести к неожиданным ошибкам. Но если очень хочется – то можно😉

PS Q:\temp> handle -p 3656 -c 278

Handle v3.41
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

  278: File  (---)   Q:\temp\wlan-870isr.pdf
Close handle 278 in AcroRd32.exe (PID 3656)? (y/n) y

Handle closed.

Вот и готово. После этого, Acrobat Reader даже дал мне полистать несколько страниц документа, правда потом выдал ожидаемую ошибку🙂

image

Возможно вам повезет больше😉 Иногда эта функция действительно бывает полезна.

Кстати чтобы handle.exe не переспрашивал вас, можно добавить ключ –y

Опубликовано в SysInternals. Метки: , , , . 4 комментария »

комментария 4 to “Handle.exe или как разблокировать файл”

  1. MaximumExchange.ru Says:

    О! Это хорошо, потому что Unlocker еще не адаптировали под Win7.

  2. Xaegr Says:

    Всегда презирал Unlocker🙂 Если хочется GUI, можно просто поиском в Process Explorer найти handle файла, и прибить его или соответствующий процесс.

  3. MaximumExchange.ru Says:

    Нет, не всегда Process Explorer дает возможность кильнут держащий процесс.
    Process Explorer — достаточно деревянная софтина, не умеет выгружать DLL, удалять index.dat, не сможет освободить файл из потока, не прибивая основного процесса, не встраивается в контекстное меню, не имеет command line, не предложит на выбор переместить/переименовать/удалить заблокированный файл. Так что PE еще кряхтеть и кряхтеть до unlocker.
    И кстати, странно «презирать утилиту», она этого не оценит :))

  4. Ретро Says:

    А мне unlocker нравится. Как минимум простотой использования и отсутствия аналогов для юзеров. А моя компания такими полна🙂


Обсуждение закрыто.

%d такие блоггеры, как: