Estou tentando excluir algumas chaves de registro (itens de inicialização) por meio da linha de comando e, embora possa excluir de HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Executar muito bem, não consigo excluir nada de HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Executar.
Eu até criei algumas chaves temporárias lá através do regedit.exe, mas mesmo essas estão desabilitadas através da linha de comando.
Então eu procurei por tópicos similares aqui e obviamente pesquisei no Google. Geralmente isso acontece porque:
- O prompt de comando não é executado como administrador. Esse não é o caso aqui, pois definitivamente tenho direitos de administrador na janela do cmd lançada.
- As permissões do registro estão bloqueando a exclusão. Mais uma vez, este não é o caso aqui. Alterei manualmente a permissão por meio do regedit.exe e agora sou o proprietário de HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Executar com controle total para minha conta.
A mensagem de erro específica dada pela linha de comando é:
ERROR: The system was unable to find the specified registry key or value.
No entanto, a chave definitivamente existe no local onde eu estou tentando excluí-lo e até mesmo o regedit mostra lá. Eu também posso excluí-lo com o regedit sem nenhum problema.
Alguém tem alguma pista sobre o que verificar?
OK, então enquanto escrevia este post eu tropecei em algo realmente bizarro. Parece que há duas versões de HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run.
Eu não tenho idéia como isso é possível, mas quando eu copio o nome da chave no regedit eles são idênticos e ainda exibem itens diferentes. O primeiro é OK e parece que o reg.exe está tentando encontrar e excluir a chave neste local e é por isso que ele está errado. A segunda é a problemática em que existe a chave que preciso excluir por meio da linha de comando.
No entanto, quando eu adiciono uma chave idêntica a HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run, ele é gravado no local "correto" e também posso excluí-lo via linha de comando.
OK, acho que sei qual é o problema agora. A localização "correta" é exibida quando executo uma versão nativa de 64 bits do regedit, e a problemática é exibida apenas quando executo uma versão de 32 bits do regedit.
SOLUÇÃO:
Use %windir%\SysWOW64\reg.exe
para manipular entradas de registro de 32 bits e %windir%\System32\reg.exe
para manipular entradas de registro de 64 bits. Eu vou ter uma conversa séria com os autores do programa sobre o motivo pelo qual eles colocam sua chave de inicialização no reqistry de 32 bits em um sistema de 64 bits.