Gostaria de adicionar uma variável de ambiente a uma máquina Windows (desktop ou servidor) e poder usá-la sem reinicializar essa máquina.
Digamos que você tenha um servidor de produção que hospeda uma variedade de aplicativos e um novo aplicativo precisa de uma variável de ambiente específica para ser executado. Você não deseja reiniciá-lo enquanto os usuários estiverem conectados aos seus outros aplicativos. Que escolhas você tem? Eu não gosto da opção de esperar até um bom momento para reiniciar. Deve haver uma maneira melhor. o que estou perdendo?
As alterações nas variáveis de ambiente devem entrar em vigor imediatamente, se você fizer a alteração na caixa de diálogo principal Propriedades 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_SETTINGCHANGE
mensagem para todas as janelas para informá-las sobre a alteração. Todos os programas gerados pelo Explorer depois disso devem obter o ambiente atualizado, embora os programas já em execução não, a menos que lidem com a mensagem de alteração de configuração.Não consigo dizer pela descrição do seu problema qual 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
runas /user:yourusername@yourdomain cmd
taskkill /f /im explorer.exe
explorer.exe
Agora, após fechar todos os prompts de comando, você verá que a
PATH
variável foi realmente atualizada.Todos os prompts de comando devem ser fechados. Reabra um novo prompt de comando, digite path e você verá os novos dados.
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 de reinicialização, alguns programas podem antes de poderem usar as novas variáveis. Um bom exemplo disso é ter que abrir uma nova janela de prompt de comando depois de adicionar um PATH (sim, fui enganado por isso).
Embora eu não tenha reputação suficiente para comentar a resposta mais votada a esta pergunta, gostaria de afirmar que ela não é exatamente correta. Eu sei disso porque não importa qual solução alternativa eu tentei neste post, nada realmente funcionou.
O artigo kb vinculado a essa resposta realmente afirma que:
A parte sobre as variáveis de ambiente redefinindo para os valores anteriores após recarregar o prompt de comando é exatamente o que experimentei no Windows Server 2008.
O artigo prossegue dizendo:
Isso não significa que o Explorer transmita uma mensagem WM_SETTINGCHANGE depois de alterar as variáveis de ambiente do sistema ou que ele 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.
Faça o env. variável disponível imediatamente:
Dependendo da variável de ambiente que você deseja alterar, faça o seguinte: (suponha que você deseja adicionar um novo PATH para um aplicativo instalado recentemente) Então, no prompt do shell, digite o seguinte:
verifique se seu novo caminho foi adicionado à variável de ambiente
Feito.
Disponibilize a variável na reinicialização
Testado e funcionando no Windows 7/10
Como as pessoas ainda não adicionaram essa resposta, gostaria de mencionar que você pode definir variáveis de sistema permanentes que sobrevivem à reinicialização com o
SETX
comando .por exemplo
Observe que o acima não funcionará na janela de comando atual e exigirá que você abra uma nova janela de comando antes de entrar em vigor. Como resultado, dependendo do caso de uso; você pode precisar combinar isso com uma das outras técnicas acima.
Uma possível solução para serviços é executá-los temporariamente como outro usuário (diferente de 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 serviço, clique em propriedades do serviço e, na segunda guia, insira as credenciais de logon de um usuário. Reinicie o serviço e suas variáveis de ambiente devem estar atualizadas.
Se este for um usuário que foi registrado, isso deve funcionar sem problemas. Se você estiver usando a conta de usuário atual, reiniciar o explorer.exe também pode ser necessário. Observe também que a execução de serviços como conta de usuário normal pode criar riscos de segurança.