![Desbloquear ou excluir pasta bloqueada programaticamente](https://rvso.com/image/1604620/Desbloquear%20ou%20excluir%20pasta%20bloqueada%20programaticamente.png)
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 build
não inicia corretamente:
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 build
inicialização eu abri o LockHunter → desbloqueado output
→ executado build
.
Seria bom, se fosse possível executar o comando para desbloquear ou excluir output
antes 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 KiraUnlockCLI
dentro dela ( cd KiraUnlockCLI
) → KiraUnlockCLI
bloqueado:
Preciso desbloquear ou excluir KiraUnlockCLI
programaticamente.
4. Requisitos
Qualquer tipo de programa pode bloquear
output
pastas e/ou arquivos nele contidos, exemplos:- explorador de janelas
- Prompt de comando
- Editor de texto
- Navegador
- Visualizador de imagens
A solução deve desbloquear pastas, não apenas arquivos. Posso abrir em programas de terceiros qualquer arquivo
output
e suas subpastas.- Os caminhos relativos devem ser suportados.
output
está 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
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.
-
FileASSASSIN /unlock /silent KiraUnlockCLI
5.3. PID específico
- 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:
5.5. Não funciona
rm -rf KiraUnlockCLI
(rm
deGnuWin32):/usr/bin/rm: cannot remove 'KiraUnlockCLI`: Device or resource busy
OpenFilesView— nenhum efeito após este comando:
openedfilesview /closefolder closeprocess killprocess KiraUnlockCLI
destravador—
unlocker D:\SashaDebugging\KiraUnlockCLI
: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.
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
- eu seiefeitos colaterais; por favor, não me diga que não preciso da pasta de desbloqueio.
Eu li estas perguntas do SuperUser e as respostas antes de postar minha pergunta:
- Não é possível excluir a pasta vazia porque ela está em uso
- Existe uma maneira de lidar com arquivos bloqueados na linha de comando e liberá-los?
- Como excluo uma pasta que está em uso?
- Exclua um diretório da linha de comando do Windows, mesmo que tenha sido aberto em um programa
- Exclua arquivo/pasta bloqueado da linha de comando
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
}