Думаю нет среди моих читателей человека, который не сталкивался бы с проблемой файлов “залоченных” другими процессами. Ситуация вобщем то простая, и естественная – программа, для работы с файлом, открывает его с доступом на запись, или для монопольного чтения. Подробности наверное интерисуют лишь программистов, а нам важно понять что за процесс открыл этот файл, и как его освободить. Для этого я обычно использую утилиту от Sysinternals – Handle.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 даже дал мне полистать несколько страниц документа, правда потом выдал ожидаемую ошибку
Возможно вам повезет больше
Иногда эта функция действительно бывает полезна.
Кстати чтобы handle.exe не переспрашивал вас, можно добавить ключ –y









О! Это хорошо, потому что Unlocker еще не адаптировали под Win7.
Комментарий от MaximumExchange.ru — 28.4.2009 @ 11:40
Всегда презирал Unlocker
Если хочется GUI, можно просто поиском в Process Explorer найти handle файла, и прибить его или соответствующий процесс.
Комментарий от Xaegr — 28.4.2009 @ 11:43
Нет, не всегда Process Explorer дает возможность кильнут держащий процесс.
)
Process Explorer – достаточно деревянная софтина, не умеет выгружать DLL, удалять index.dat, не сможет освободить файл из потока, не прибивая основного процесса, не встраивается в контекстное меню, не имеет command line, не предложит на выбор переместить/переименовать/удалить заблокированный файл. Так что PE еще кряхтеть и кряхтеть до unlocker.
И кстати, странно «презирать утилиту», она этого не оценит
Комментарий от MaximumExchange.ru — 28.4.2009 @ 17:59
А мне unlocker нравится. Как минимум простотой использования и отсутствия аналогов для юзеров. А моя компания такими полна
Комментарий от Ретро — 31.8.2009 @ 15:37