Por que as alterações no meu PATH não estão sendo reconhecidas?

36

Quando atualizo meu PATH usando a caixa de diálogo Variáveis ​​de ambiente interna ou algo como o Editor de caminhos e, em seguida, abro um prompt de comando, as alterações no meu PATH não são registradas no console, dependendo de onde o prompt de comando estava. começou em.

Por exemplo, se eu editar o meu PATH e iniciar o cmd.exe no menu Iniciar ou em um atalho na área de trabalho, meu PATH ficará bem: foi atualizado com êxito; no entanto, se eu iniciar o cmd.exe a partir de um atalho em outro lugar que não seja o Menu Iniciar ou a Área de Trabalho, o novo PATH não será lido e, em vez disso, o caminho antigo será exibido. É muito estranho.

Eu tentei executar o prompt de comando a partir de um atalho na área de trabalho e funciona bem; Em seguida, copio exatamente o mesmo atalho para uma subpasta na área de trabalho e recebo o problema do PATH não atualizado.

Sei que isso é muito difícil de explicar, então criei um screencast para mostrar esse problema em ação .

Aqui está uma captura de tela do atalho do prompt de comando, conforme visto no screencast:

Configurações de atalho do prompt de comando

Isso está no Windows Vista Home Premium SP2.

Charles Roper
fonte

Respostas:

30

Quando você inicia um novo processo (como uma nova linha de comando), ele seleciona as variáveis ​​de ambiente do processo que o está iniciando. Quando o caminho é atualizado, apenas o processo que executa a atualização pode saber que foi alterado, e a configuração não se propaga até que você faça logon novamente (para configurações por usuário) ou reinicialize (para configurações em todo o sistema)

Rowland Shaw
fonte
2
No entanto, o explorerprocesso principal detectará alterações de ambiente no Registro (a caixa de diálogo pertence rundll32) e atualizará seu próprio ambiente automaticamente. (Pelo menos no XP, é o que faz.) É por isso que as alterações são visíveis ao iniciar a cmdpartir de um atalho.
grawity
Rowland, isso me forneceu informações suficientes para solucionar exatamente por que isso estava acontecendo, embora não respondesse totalmente à minha pergunta. Veja minha própria resposta para obter detalhes. Obrigado!
Charles Roper
Obrigado por esta resposta! Tudo o que eu precisava fazer era fechar meu prompt de comando e abri-lo novamente.
user1477388
Esta foi a solução para mim! Estou usando o Git Bash para Windows em um wrapper multitab (ConEmu) e me perguntei por que echo $PATHnão estava funcionando. Eu supus que seria novo, mas não deu certo até fechar todas as guias do Git Bash e ConEmu.
precisa saber é o seguinte
27

Como Rowland sugere, ao iniciar um novo processo, ele lerá as variáveis ​​de ambiente do processo que o está iniciando. Portanto, ao iniciar um prompt de comando no Menu Iniciar ou na área de trabalho , ele lê as variáveis ​​de ambiente a partir das explorer.exequais, como sugere o grawity, detecta alterações nas configurações do ambiente no registro e, portanto, vejo meu novo PATH nos prompt de comando iniciado no Área de trabalho ou Menu Iniciar.

A razão de eu não ver as atualizações para o meu caminho no screencast eu postei é porque eu tinha inicialmente lançada uma janela do Explorer usando FARR tornando FindAndRunRobot.exeo processo pai. O FARR não detecta automaticamente as mudanças no ambiente e, portanto, os processos filhos gerados a partir dele não capturam o novo PATH. Eu também tinha a opção ' Iniciar janelas da pasta em um processo separado ' definida no Explorer, o que significa que todas as janelas do explorer.exe abri subseqüentemente à inicial aberta pela FARR, onde também são filhos da FARR .

Ao desativar a opção ' Iniciar janelas da pasta em um processo separado ', novos explorer.exeprocessos não são criados no FARR, o que resolve o meu problema. No entanto, também inicio janelas de console e outras coisas diretamente da FARR; estes também recebem as configurações antigas do ambiente. Se eu reiniciar o FARR, as novas configurações do ambiente serão propagadas.

Aqui está uma captura de tela do Process Explorer mostrando os processos gerados pelo FARR. Nenhum desses processos recebe as novas configurações de ambiente do nível superior, a explorer.exemenos que eu reinicie o FARR:

explorador de processos

Charles Roper
fonte
3
Por que minha resposta foi rejeitada? Se houver uma falha, avise-me e tentarei corrigi-la.
Charles Roper
faz muito sentido.
Lwpro2