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?
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 um WM_SETTINGCHANGE
mensagem para todas as janelas para informá-los da 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
runas /user:[email protected] cmd
taskkill /f /im Explorer.exe
Explorer.exe
Agora, após fechar todos os prompts de comando, você verá que a variável PATH
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.
Um aspecto 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 ser necessários 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).
Embora eu não tenha reputação suficiente para comentar a resposta mais votada para essa pergunta, gostaria de afirmar que não está exatamente correto. 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 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 redefinidas para os valores anteriores após o recarregamento do 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.
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
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 serviço, clique em propriedades do serviço 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, também poderá ser necessário reiniciar o Explorer.exe. Observe também que a execução de serviços como uma conta de usuário normal pode criar riscos à segurança.
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 combiná-lo com uma das outras técnicas acima.