Desbloquear ou excluir pasta bloqueada programaticamente

Desbloquear ou excluir pasta bloqueada programaticamente

1. Resumo

Não consegui descobrir como desbloquear ou excluir uma pasta bloqueada com todas as subpastas por meio da interface de linha de comando.


2. Argumentação

Estou trabalhando no projeto. Por exemplo, minha pasta de fontes — sources, pasta de saída — output. Eu visualizo arquivos e/ou faço alterações de teste em output→ adiciono alterações em sources→ executo o comando build ( build, por exemplo), que deve substituir output. Mas buildnão inicia corretamente:

Pasta em uso

Pasta em uso

A ação não pode ser concluída porque a pasta ou arquivo contido nela está aberto em outro programa

Feche a pasta ou arquivo e tente novamente

Portanto, antes de cada buildinicialização eu abri o LockHunter → desbloqueado output→ executado build.

Seria bom, se fosse possível executar o comando para desbloquear ou excluir outputantes build, que eu não precisasse executar manualmente o LockHunter todas as vezes, gastando tempo com isso.


3. MCVE

Criei uma pasta KiraUnlockCLI→ abri o prompt de comando → movi para KiraUnlockCLIdentro dela ( cd KiraUnlockCLI) → KiraUnlockCLIbloqueado:

Pasta bloqueada

Preciso desbloquear ou excluir KiraUnlockCLIprogramaticamente.


4. Requisitos

  1. Qualquer tipo de programa pode bloquear outputpastas e/ou arquivos nele contidos, exemplos:

    1. explorador de janelas
    2. Prompt de comando
    3. Editor de texto
    4. Navegador
    5. Visualizador de imagens
  2. A solução deve desbloquear pastas, não apenas arquivos. Posso abrir em programas de terceiros qualquer arquivo outpute suas subpastas.

  3. Os caminhos relativos devem ser suportados. outputestá localizado em diretórios diferentes para mim, outros desenvolvedores e integração contínua (Travis CI, AppVeyor).

5. Não ajudou

5.1. Caminhos relativos

  1. LockHunternão suporta caminhos relativos.

    No início de setembro de 2019 euescreveu um problema→ Contei sobre meu problema emFormulário de feedback do LockHunter→ Não recebi nenhum feedback.

5.2. Suporte a pastas

Esses programas podem desbloquear arquivos, não pastas.

  1. ArquivoASSASSIN:

    FileASSASSIN /unlock /silent KiraUnlockCLI
    
  2. OcupadoExcluir

5.3. PID específico

  1. Lidar— PIDs necessários para desbloqueio. Mas preciso matar processos com qualquer PID; veja o item 4.1 da minha pergunta.

5.4. GUI

Não consegui encontrar nenhuma informação sobre a interface de linha de comando destes programas:

  1. Desbloqueador IObit
  2. Desbloquear TI

5.5. Não funciona

  1. rm -rf KiraUnlockCLI( rmdeGnuWin32):

    /usr/bin/rm: cannot remove 'KiraUnlockCLI`: Device or resource busy
    
  2. OpenFilesView— nenhum efeito após este comando:

    openedfilesview /closefolder closeprocess killprocess KiraUnlockCLI
    
  3. WhoLockMe não funciona no Windows 10.

  4. destravadorunlocker D:\SashaDebugging\KiraUnlockCLI:

    destravador

    Nenhuma alça de bloqueio encontrada.

    Mas o Unlocker pode ajudá-lo a lidar com esse problema.

    Escolha a ação que deseja executar no objeto.

  5. Impassenão é possível desbloquear pastas por meio da interface de linha de comando. Vermeu problemapara o rastreador de problemas DeadLock.


6. Não ofereça

  1. eu seiefeitos colaterais; por favor, não me diga que não preciso da pasta de desbloqueio.
  2. Eu li estas perguntas do SuperUser e as respostas antes de postar minha pergunta:

    1. Não é possível excluir a pasta vazia porque ela está em uso
    2. Existe uma maneira de lidar com arquivos bloqueados na linha de comando e liberá-los?
    3. Como excluo uma pasta que está em uso?
    4. Exclua um diretório da linha de comando do Windows, mesmo que tenha sido aberto em um programa
    5. Exclua arquivo/pasta bloqueado da linha de comando
  3. Eu verifiquei programas deesta listano site do desbloqueador.

Responder1

Desde que encontrei o IOBit Unlocker (cerca de 10 anos atrás), parei de usar todos os que você forneceu e alguns outros, por quê? na verdade, ele exclui os arquivos/pastas de qualquer maneira, possui uma interface limpa e você também pode automatizar (conforme solicitado). Alguns anos depois, encontrei um artigo on-line afirmando que ele exclui até arquivos do Avast AV que estão protegidos e em uso.

Se quiser, você pode instalar e deixar assim ou simplesmente pegar os arquivos e usá-lo de forma independente (use IObitUnlocker.exe /?para ver a ajuda da linha de comando):

Instalado:

IObitUnlocker.exe /Delete /Advanced <folder>

Estar sozinho:

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

Uma desvantagem em termos de automação é que exibe uma mensagem após a ação, mas você pode usar timeout /T <time> && taskkill /IM IObitUnlocker.exe. Depende <time>do conteúdo/hierarquia da pasta, de quantos arquivos estão em uso, da velocidade do seu sistema e da carga da CPU/HDD). Tenha em mente que a elevação é necessária para desbloquear.

Se acontecer de você usar o AutoHotKey, a dispensa de diálogo (e qualquer interação da interface do usuário que você possa imaginar) é trivialmente fácil de automatizar.

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

informação relacionada