Um aviso de serviço do Sistema Local será alterado para variáveis de ambiente no Windows 2008 R2 sem uma reinicialização?

4

A Microsoft tem um artigo da base de conhecimento , revisado pela última vez em junho de 2007, que declara:

If you update environment variables or add new environment variables, you must restart the computer before the changes that you make affect services that run under the Local System account.

Não está claro para mim se isso vale para o Windows Server 2008 R2. Alguém pode aconselhar?

Noto que existe um hotfix para Windows 2003 que resolve esse problema. Consequentemente, pergunto-me se o 2008 R2 foi implementado nessa correção. Não consigo encontrar nenhuma evidência para sugerir que ainda há um problema com o Windows 2008 R2, mas a falta de evidências é menos reconfortante do que uma declaração concreta em contrário.

Uma pergunta relacionada abrange um campo semelhante, mas não discute o Windows 2008.

    
por Duncan Jones 11.11.2014 / 09:45

4 respostas

7

Reiniciar um serviço irá selecionar as alterações nas variáveis de ambiente do sistema.

Para verificar: Use o SysInternals Process Explorer para inspecionar o ambiente de um processo de serviço antes e depois de alterar / adicionar uma variável de ambiente do sistema e reiniciar o serviço. Nota: Use "Executar como administrador" no procexp.exe para ver todas as propriedades dos processos do sistema.

    
por 17.11.2014 / 22:48
1

Claro. Qualquer processo vê as variáveis de ambiente COMO ESTÃO QUANDO O PROCESSO COMEÇA. Basicamente, recebe uma cópia.

Então, se você precisar deles para ser escolhido pelos serviços - reinicie os serviços. Se você precisar deles para ser pego pelo windows, reinicie o Windows.

Especialmente porque a conta do sistema local está mantendo essa cópia;) Então - não. Isso ainda é verdade. Eu geralmente diria que mudar isso é um item de "quase prioridade zero", já que esse tipo de mudança é bastante raro.

    
por 11.11.2014 / 11:16
0

Possível via hack desagradável durante a execução. Caso contrário, apenas pelo reinício.

Apenas verifiquei que as variáveis de ambiente podem ser alteradas com o Cygwin GDB. Tentei com x86 Cygwin e x86 Winword. Verificado com ProcExp.exe.

Comandos do GDB encontrados aqui: link

A Microsoft diz que essa não é a maneira comum de fazer isso: link

Altering the environment variables of a child process during process creation is the only way one process can directly change the environment variables of another process. A process can never directly change the environment variables of another process that is not a child of that process.

Minha edição anterior:

Meu melhor palpite: o serviço precisa ser reiniciado. Finalmente.

Um processo na criação herdará as variáveis do ambiente de seu pai. ( link )

Então: O processo deve ser reiniciado E deve haver algo para herdar.

Como verificar
Verifique se você está usando o ProcExp.exe. ( link ) Clique duas vezes no processo em que está interessado e selecione o "Ambiente" tab.

Para encontrar o pai, clique duas vezes no filho, selecione a guia "Imagem" e leia a linha "Pai:".

Repita todo o caminho até a linha do patrimônio.

    
por 14.11.2014 / 10:03
0

@Brian answer não cobre todos os casos de uso. No meu caso, atualizei o Java no Windows 7 x64 da versão 7 para 8. Depois disso, o serviço que depende do Java falhou ao iniciar ("net start SymmetricDS") porque o sistema não pôde localizar o Java executável.

Ou seja. services.exe (processo pai de todos os serviços LocalSystem) não seleciona as alterações das variáveis de ambiente. Apenas o faz para novos processos filhos gerados. Eu confirmei olhando para ele com o SysInternals Process Explorer. Prova: link . Ele não diz em quais versões do Windows ele se aplica, mas a data de publicação é bastante nova, então acho que se aplica ao Windows 7 e ao Windows Server 2008.

Resolveu o problema fazendo links simbólicos para executáveis Java em uma das pastas no PATH antigo contido em services.exe.

    
por 16.02.2016 / 13:08