Разблокировать или удалить заблокированную папку программным способом

Разблокировать или удалить заблокированную папку программным способом

1. Резюме

Я не смог найти, как разблокировать или удалить заблокированную папку со всеми подпапками через интерфейс командной строки.


2. Аргументация

Я работаю над проектом. Например, моя папка исходников — sources, папка вывода — output. Я просматриваю файлы и/или вношу тестовые изменения в output→ Я добавляю изменения в sources→ Я запускаю команду сборки ( buildнапример, ), которая должна перезаписать output. Но buildзапускается некорректно:

Папка используется

Папка используется

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

Закройте папку или файл и повторите попытку.

Поэтому перед каждым buildзапуском я открывал LockHunter → разблокировал output→ запустил build.

Было бы неплохо, если бы можно было запустить команду на разблокировку или удаление outputзаранее build, чтобы не нужно было каждый раз вручную запускать LockHunter, тратя на это время.


3. МКВЭ

Я создал папку KiraUnlockCLI→ открыл командную строку → переместил в KiraUnlockCLIнее ( cd KiraUnlockCLI) → KiraUnlockCLIзаблокировал:

Папка заблокирована

Мне нужно разблокировать или удалить KiraUnlockCLIпрограммно.


4. Требования

  1. Любой тип программы может блокировать outputпапку и/или файлы в ней, примеры:

    1. проводник Виндоус
    2. Командная строка
    3. Текстовый редактор
    4. Браузер
    5. Просмотрщик изображений
  2. Решение должно разблокировать папки, а не только файлы. Я могу открыть в сторонних программах любые файлы в outputи ее подпапках.

  3. Должны поддерживаться относительные пути. outputнаходится в разных каталогах для меня, других разработчиков и Continuous Integration (Travis CI, AppVeyor).

5. Не помогло

5.1 Относительные пути

  1. LockHunterне поддерживает относительные пути.

    В начале сентября 2019 года янаписал вопрос→ Я рассказал о своей проблеме вФорма обратной связи LockHunter→ Я не получил никаких отзывов.

5.2 Поддержка папок

Эти программы могут разблокировать файлы, но не папки.

  1. ФайлASSASSIN:

    FileASSASSIN /unlock /silent KiraUnlockCLI
    
  2. ЗанятУдалить

5.3 Конкретный PID

  1. Ручка— Для разблокировки требуются PID. Но мне нужно убить процессы с любым PID; см. пункт 4.1 моего вопроса.

5.4.Графический интерфейс пользователя

Мне не удалось найти никакой информации об интерфейсе командной строки этих программ:

  1. IObit Unlocker
  2. Разблокируйте ЭТО

5.5 Не работает

  1. rm -rf KiraUnlockCLI( rmотGnuWin32):

    /usr/bin/rm: cannot remove 'KiraUnlockCLI`: Device or resource busy
    
  2. ОткрытыеФайлыПросмотр— никакого эффекта после этой команды:

    openedfilesview /closefolder closeprocess killprocess KiraUnlockCLI
    
  3. КтоЗаблокировалМеня не работает в Windows 10.

  4. Разблокировщикunlocker D:\SashaDebugging\KiraUnlockCLI:

    Разблокировщик

    Ручка блокировки не найдена.

    Однако Unlocker может помочь вам справиться с этим объектом.

    Выберите действие, которое вы хотите выполнить над объектом.

  5. DeadLockне могу разблокировать папки через интерфейс командной строки. Смотритемоя проблемав систему отслеживания ошибок DeadLock.


6. Не предлагайте

  1. Я знаюпобочные эффекты; пожалуйста, не говорите мне, что мне не нужна папка разблокировки.
  2. Прежде чем опубликовать свой вопрос, я прочитал следующие вопросы SuperUser и ответы на них:

    1. Невозможно удалить пустую папку, так как она используется
    2. Есть ли способ справиться с заблокированным файлом из командной строки и освободить его?
    3. Как удалить используемую папку?
    4. Удалить каталог из командной строки Windows, даже если он был открыт в программе
    5. Удалить заблокированный файл/папку из командной строки
  3. Я проверил программы изэтот списокна сайте Unlocker.

решение1

С тех пор, как я нашел IOBit Unlocker (~10 лет назад), я перестал использовать все, что вы предоставили, и несколько других, почему? Он на самом деле удаляет файлы/папки, несмотря ни на что, имеет понятный интерфейс, и вы также можете автоматизировать (как вы и просили). Несколько лет спустя я наткнулся на онлайн-статью, в которой говорилось, что он даже удаляет файлы Avast AV, которые защищены и используются.

Если хотите, можете установить и оставить всё как есть или просто получить файлы и использовать их автономно (используйте IObitUnlocker.exe /?для просмотра справки по командной строке):

Установлен:

IObitUnlocker.exe /Delete /Advanced <folder>

Автономно:

cd <app folder>
sc create IObitUnlocker type= kernel start= demand binPath= "IObitUnlocker.sys"
IObitUnlocker.exe /Delete /Advanced <folder>
sc delete IObitUnlocker
rd /S /Q %AllUsersProfile%\IObit

Недостатком автоматизации является то, что после действия отображается сообщение, но вы можете использовать timeout /T <time> && taskkill /IM IObitUnlocker.exe. <time>Зависит от содержимого/иерархии папок, количества используемых файлов, скорости вашей системы и загрузки ЦП/жесткого диска). Имейте в виду, что для разблокировки необходимо повышение прав.

Если вы используете AutoHotKey, то закрытие диалоговых окон (и любое взаимодействие с пользовательским интерфейсом, которое вы только можете придумать) автоматизировать очень просто.

SetTimer, DismissUnlocker, 1000
DismissUnlocker() {
  If WinExist("IObit Unlocker ahk_class #32770")
    ControlClick, Button1
}

Связанный контент