Como você adiciona uma variável de ambiente do Windows sem reiniciar?

181

Eu gostaria de adicionar uma variável de ambiente a uma máquina Windows (desktop ou servidor) e poder usá-la sem reiniciar a máquina.

Digamos que você tenha um servidor de produção que hospede uma variedade de aplicativos e um novo aplicativo precise de uma variável de ambiente específica para executar. Você não deseja reiniciá-lo enquanto os usuários estiverem conectados aos seus outros aplicativos. Que escolhas você tem? Não gosto da opção esperar até um bom momento para reiniciar. Deve haver uma maneira melhor. o que estou perdendo?

Chad Braun-Duin
fonte
2
Eu tive esse mesmo problema. Eu li em algum lugar que matar o processo explorer.exe atualizaria as variáveis ​​e funcionou. Então eu apenas tive que executar o explorer a partir do gerenciador de tarefas.
User19694 08/09/09
1
Você precisa fechar o prompt de comando e reabri-lo novamente para que as variáveis ​​do caminho sejam atualizadas. As variáveis ​​são carregadas quando o cmd é iniciado.
NiLInfinite

Respostas:

162

As alterações nas variáveis ​​de ambiente devem entrar em vigor imediatamente, se você fizer a alteração na caixa de diálogo Propriedades principal do computador em questão (vá para Meu Computador | Propriedades | Avançado | Variáveis ​​de Ambiente). Depois que as alterações são salvas, o Explorer transmite uma WM_SETTINGCHANGEmensagem para todas as janelas para informá-las sobre a alteração. Qualquer programa gerado pelo Explorer depois disso deve obter o ambiente atualizado, embora os programas em execução não o façam, a menos que lidem com a mensagem de alteração de configuração.

Não sou capaz de dizer pela descrição do seu problema que problema específico você está tendo com isso. Você pode nos contar mais sobre o cenário específico que não está funcionando?

Este artigo da KB também pode ser útil: Como propagar variáveis ​​de ambiente para o sistema

Charlie
fonte
2
Ok, acho que devo ter visto esse comportamento em um serviço em execução ou algo assim. Eu adicionei uma nova variável de ambiente usando o método descrito acima. Então, eu era capaz de ver o valor após a abertura de um novo prompt de comando e usando o comando "echo% <myvar>% Obrigado a ambos por suas respostas..
Chad Braun-Duin
5
Para usuários do PowerShell, este trecho pode ser útil
Anders Zommarin
8
Se estiver usando o cmd, você precisará reiniciá-lo se alterar a variável env #
Neil McGuigan
4
Acabei de instalar o Scala no meu PC, mas o PATH não foi atualizado; presumivelmente, o MSI não transmitiu a mensagem WM_SETTINGCHANGE. I adicionou-se uma variável binária ou seja SISTEMA CHANGE_TO_UPDATE = z, que eu actualização para desencadear a mensagem WM_SETTINGCHANGE - problema resolvido
Darren Bishop
3
404 para o link :-(
Samoth
63
  1. Em um prompt de comandos, digite: runas /user:yourusername@yourdomain cmd
  2. Ele abrirá um novo prompt de cmd e digite: taskkill /f /im explorer.exe
  3. Então digite: explorer.exe

Agora, após fechar todos os prompts de comando, você verá que a PATHvariável foi realmente atualizada.

Todos os prompts de comando devem estar fechados. Reabra um novo prompt de comando, digite path e você verá os novos dados.

Ron AndKim Stengel
fonte
6
De todas as respostas desta página, essa é a única que realmente funcionou para mim. Obrigado!!
Coredumperror
2
Isso funcionou para mim. Penso que o problema é que, se você executar o cmd através do explorer (para evitar a necessidade de digitar caminhos longos), o explorer nunca será fechado, mesmo se você fechar todas as janelas do explorer. Graças para a solução :)
Steve Mc
Trabalhou para mim. Você também pode usar o Gerenciador de tarefas para eliminar as tarefas do explorador e reiniciá-lo (Arquivo> Executar nova tarefa).
precisa saber é o seguinte
7
Uhh Por favor, não mate o Windows Explorer, a menos que um de seus processos esteja travado. Em vez disso, abra a caixa de diálogo de desligamento e cancele-a enquanto mantém pressionado ctrl+alt+shift. Isso sairá corretamente do Windows Explorer. No Vista +, a caixa de diálogo das janelas de desligamento é mais difícil de encontrar (mas ainda está presente, pelo menos até o 7 (não tenho certeza sobre 8 e 10)), então existe um segundo método. ctrl + shift + clique com o botão direito do mouse em uma parte vazia do menu Iniciar e escolha sair do Explorer. Em 8, a opção de saída é a mesma, mas você usa a barra de tarefas e não o menu Iniciar.
Kevin Cathcart
1
+1 Isso funciona como um encanto no Windows 7. Para sua informação, simplesmente usei CTRL + ALT + SHIFT e, no Gerenciador de tarefas do Windows, matei todo o processo explorer.exe e o iniciei novamente pressionando o botão Nova tarefa .
Marco Demaio 29/11
19

Uma coisa a ter em mente é que muitos programas obtêm as variáveis ​​ambientais quando são iniciados pela primeira vez; portanto, embora o Windows possa não precisar ser reiniciado, alguns programas podem antes de poder usar as novas variáveis. Um bom exemplo disso é ter que abrir uma nova janela de prompt de comando após adicionar um PATH (sim, eu fui enganado por isso).

nedm
fonte
3
Esse problema afeta TODOS OS SERVIÇOS, mesmo um serviço reiniciado não verá novas variáveis ​​de ambiente.
Gimel #
1
Tem certeza de que não é por causa do compartilhamento de um processo svchost?
precisa saber é o seguinte
16

Embora eu não tenha reputação suficiente para comentar a resposta mais votada a essa pergunta, gostaria de afirmar que não está exatamente correto. Eu sei disso porque não importa qual solução alternativa tentei neste post, nada realmente funcionou.

O artigo kb vinculado a essa resposta na verdade afirma que:

No entanto, observe que as modificações nas variáveis ​​de ambiente não resultam em alterações imediatas. Por exemplo, se você iniciar outro prompt de comando após fazer as alterações, as variáveis ​​de ambiente refletirão os valores anteriores (não os atuais). As alterações não surtirão efeito até você fazer logoff e logon novamente.

A parte sobre as variáveis ​​de ambiente que foram redefinidas para os valores anteriores após recarregar o prompt de comando é exatamente o que experimentei no Windows Server 2008.

O artigo continua dizendo:

Para efetuar essas alterações sem precisar fazer logoff, transmita uma mensagem WM_SETTINGCHANGE para todas as janelas do sistema, para que qualquer aplicativo interessado (como Windows Explorer, Gerenciador de Programas, Gerenciador de Tarefas, Painel de Controle etc.) possa executar uma atualização.

Isso não implica que o Explorer transmita uma mensagem WM_SETTINGCHANGE depois de alterar as variáveis ​​de ambiente do sistema ou que realmente funcione. Não tenho certeza de como você faria o que é sugerido no artigo da KB (para propagar as alterações imediatamente) no prompt de comando.

testworks
fonte
1
Esta é a única resposta certa para mim. Nenhum dos outros, incluindo matar o Explorer da maneira mais difícil ou "adequada", faz qualquer diferença.
Hashim
4

Faça o env. variável disponível imediatamente:

1. Open a shell

Dependendo da variável de ambiente que você deseja alterar, faça o seguinte: (suponha que você queira adicionar um novo PATH para um aplicativo instalado recentemente). Portanto, no prompt do shell, digite o seguinte:

2. PATH=%PATH%;C:\type\your\new\path\here

verifique se seu novo caminho foi adicionado à variável de ambiente

3. echo %PATH%

Feito.

Disponibilize a variável na reinicialização

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok

Testado e funcionando no Windows 7/10

Pedro Sousa
fonte
3

Uma solução possível para os serviços é executá-los temporariamente como outro usuário (que não seja LocalSystem, LocalService, NetworkService). Por exemplo, para o serviço Apache, isso funciona sem problemas. Para alterar a conta de serviço, abra o console services.msc, selecione service, clique em service properties e, na segunda guia, insira as credenciais de logon para um usuário. Reinicie o serviço e suas variáveis ​​de ambiente devem estar atualizadas.

Se este é um usuário que efetuou logon, isso deve funcionar sem problemas. Se você estiver usando uma conta de usuário atual, a reinicialização do explorer.exe também poderá ser necessária. Observe também que a execução de serviços como uma conta de usuário normal pode criar riscos à segurança.

Odin
fonte
1

Como as pessoas ainda não adicionaram essa resposta, gostaria de mencionar que você pode definir variáveis ​​permanentes do sistema que sobrevivam à reinicialização com o comando SETX.

por exemplo

setx PATH "%PATH%;c:\temp\my\new\path"

Observe que o descrito acima não funcionará na janela de comando atual e exigirá que você abra uma nova janela de comando antes que ela entre em vigor. Como resultado, dependendo do caso de uso; pode ser necessário combinar isso com uma das outras técnicas acima.

Consulte o seguinte URL para obter detalhes adicionais :

Doug
fonte
não funciona: / "sintaxe inválida"
Joe DF
1
Tente agora. Aparentemente, precisava de aspas duplas.
Doug
Obrigado, sim, eu imaginei .... exceto que eu recebo um aviso de truncamento, então não posso adicioná-lo ... :(
Joe DF