Por que recebo “'opam' não reconhecido…” sempre que executo qualquer arquivo de lote no PowerShell?

0

Ontem experimentei o OCaml e opri no meu sistema Windows sem usar um instalador - acabei de colocar os binários em uma pasta. Pouco tempo depois, removi os binários. Agora, sempre que executo qualquer arquivo em lote somente no PowerShell , recebo isso:

C:\> .\test.bat
'opam' is not recognized as an internal or external command,
operable program or batch file.
"Hi!!"

Aqui está o conteúdo de test.bat, mas isso está acontecendo com qualquer arquivo em lote que eu execute:

@echo off

echo "Hi!!"

Como você pode ver na saída do PowerShell, parece que foi feita uma tentativa de executar o opam, que, é claro, não pode ser encontrado, já que os binários são removidos. Em seguida, o arquivo em lotes é executado normalmente. Note que isso não acontece ao executar o arquivo em lote com cmd.exe.

O que está acontecendo aqui e como posso corrigi-lo?

    
por Jeff P. 13.12.2017 / 19:19

1 resposta

3

Ok, encontrei a resposta:

Existem algumas chaves de registro pouco conhecidas que o cmd.exe procura para executar scripts ou comandos automaticamente na inicialização. A chave em questão era HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun . Aparentemente, quando eu corri o opam, ele colocou opam configure --autorun nessa chave de registro. Assim, sempre que eu iniciava o cmd.exe ou executava um arquivo em lotes no PowerShell (que invocava o cmd.exe para executá-lo), ele tentou executar o comando nessa chave. Como o opam foi excluído (e removido do sistema PATH ), eu estava recebendo

'opam' is not recognized as an internal or external command,
operable program or batch file.

Descobri a existência dessa chave do registro no blog do Caelum .

Se você digitar cmd /? , o texto da ajuda listará as chaves do Registro que ele procura. O texto de ajuda (no Windows 10) diz:

If /D was NOT specified on the command line, then when CMD.EXE starts, it
looks for the following REG_SZ/REG_EXPAND_SZ registry variables, and if
either or both are present, they are executed first.

    HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

        and/or

    HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

Então, para resolver isso, procurei a chave do registro e a excluí. O problema agora não ocorre mais.

    
por 13.12.2017 / 23:09