Atualizar variável de ambiente

12

Como atualizar um shell do cmd do Windows depois de modificar minhas variáveis ​​de ambiente?

ou seja, no bash eu posso simplesmente fazer "source ~ / .bashrc"

Don Ch
fonte
Há uma boa resposta para a mesma pergunta no Stackoverflow.
Hugh Allen
Feche o console e abra um novo.
21412 Synetech

Respostas:

4

Realmente depende de como suas variáveis ​​de ambiente foram definidas. Se, por exemplo, você usou o comando "SET" na linha de comando, isso afeta apenas a instância atual. Por outro lado, comandos como "SETX" ajustam permanentemente o valor da variável de ambiente. O SETX garantirá que todas as instâncias futuras do cmd verão a atualização. Não afetará o ambiente local.

Se a variável de ambiente for definida por outro aplicativo e não estiver sendo atualizada, geralmente é mais fácil reiniciar o processo "explorer.exe", efetuar logoff e logon novamente ou reiniciar. Essencialmente, você só precisa dizer ao explorer para recarregar as variáveis ​​de ambiente. Se for um aplicativo que você desenvolveu, como um instalador, verifique se ele está chamando SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");. Isso diz ao explorer para atualizar seu cache das variáveis ​​de ambiente.

Isso é importante porque aplicativos lançados por outro processo herdam suas variáveis ​​de ambiente de seus pais. Dessa forma, se você iniciar o cmd no explorer, obterá as variáveis ​​conforme o explorer as vê.

Chris Crutchfield
fonte
1

Definir e recuperar o ambiente principal no Windows é algo em que o pessoal do BartPE passou bastante tempo.

O ambiente principal é armazenado no registro, mas o shell do explorador lê isso em seu endereço. A partir daqui, ele é enviado para cada sessão do cmd.exe.

SET afeta apenas o ambiente cmd. O SETX permite alterar o ambiente principal, mas a configuração não é refletida no ambiente local.

O CONSET e o 4NT de Frank Westlake podem buscar entradas do registro, mas nenhuma opção para o ambiente principal em particular.

As janelas normalmente carregadas mantêm o controle das configurações do registro, enquanto as carregadas através do minint (ou seja, WinPE) não. Portanto, a configuração do registro e a leitura do registro funcionam em ambos, mas apenas as janelas normalmente inicializadas verão as configurações e as passarão para um novo programa cmd, exe.

wendy.krieger
fonte
0

isso depende de onde você "define" suas variáveis ​​de ambiente. o equivalente ao seu exemplo do bash seria assim:

arquivo: env.bat

set FOO=bar

e agora você atualiza

% call env.bat

mas eu acho que você fez isso através da janela de configurações do sistema do Windows (ou qualquer que seja o seu nome). O resultado disso é que você realmente mudou o registro. essas configurações do registro são mapeadas para o processo quando você inicia um novo processo.

portanto, você pode iniciar um novo processo (cmd.exe no seu caso) OU pode ler as chaves do Registro que refletem as alterações desejadas. você também pode escrever um pequeno script .bat / .cmd, que obtém o ambiente do registro e altera o ambiente atual de acordo (se o clima parecer positivo, farei isso depois do almoço).

akira
fonte
0

Agora é significativamente mais fácil, não há necessidade de reiniciar o shell:

  1. Abra o menu Iniciar e procure por RefreshEnv.bat
  2. Corre RefreshEnv.bat

Observe que suas variáveis ​​de ambiente recém-adicionadas estão disponíveis em qualquer nova instância do Command / Powershell, verificando a atualização.

Lance McCarthy
fonte
O que você quer dizer com agora? Desde qual versão? Esse arquivo bat está disponível no Windows?
Máté Juhász