Variáveis de ambiente do usuário versus sistema: As variáveis do sistema substituem as variáveis do usuário?

14

Eu tenho direitos elevados no meu laptop, mas não direitos de administrador. Direitos de administrador são necessários para modificar variáveis de ambiente do sistema. Eu esperava que, se eu criasse uma variável de ambiente de usuário com o mesmo nome de uma variável de ambiente do sistema, a variável de usuário substituísse a variável de sistema, mas isso não parece ser o caso.

Depois de adicionar uma variável de usuário com o mesmo nome de uma variável do sistema, abri uma nova janela cmd e usei o comando echo para exibir a variável. Mostrou-me o valor da variável do sistema em vez do valor da variável do usuário.

Eu só queria confirmar que esse é o comportamento esperado e entender o raciocínio por trás disso. Eu esperaria que a configuração de usuário mais específica substituísse a do sistema.

Eu tenho o Windows 7.

    
por Chad 20.01.2015 / 16:50

2 respostas

17

De acordo com o artigo do MSKB Variáveis de ambiente no Windows NT :

User environment variables....take precedence over system environment variables.

Uma exceção notável é a variável PATH , que é um resultado combinado das variáveis do sistema e do usuário:

The Path is constructed from the system path, which can be viewed in the System Environment Variables field in the System dialog box. The User path is appended to the system path.

O artigo também discute exceções idênticas para a expansão das variáveis LibPath e Os2LibPath , bem como de como aquelas especificadas em autoexec.bat são manipuladas. É provável que esses pontos encontrem pouca relevância nos ambientes típicos atuais.

Acredite: resposta

    
por 16.02.2015 / 01:34
1

Tudo o que Twisty Impersonator disse em sua resposta está correta. A ideia de que a variável de caminho do usuário é acrescentada foi destacada e acredito que as conseqüências dessa diferença requerem algum tratamento adicional.

Path = %Path% (System) ; %Path% (User)

Quando você executa um programa executável (ou qualquer script executável, como .bat , .vbs , etc.), não é necessário fornecer o caminho completo.

Por exemplo, para executar java , você pode digitar qualquer um destes:

C:/Program Files (x86)/Java/jre6/bin/java -version

java.exe -version

java -version

O primeiro exemplo usa um caminho totalmente qualificado. Isso sempre usará a versão do Java nesse exato caminho.

O segundo exemplo passará por cada um dos diretórios na variável de ambiente %Path% , procurando por um arquivo executável chamado java.exe . Ele executará o primeiro que for encontrado e interromperá a pesquisa. Se houver dois arquivos chamados java.exe em algum lugar no %Path% , somente o primeiro encontrado será usado.

O terceiro exemplo, como o segundo, itera os diretórios listados no %Path% . Além disso, como uma extensão de arquivo não foi fornecida, uma lista de extensões de arquivo executável é anexada ao nome do arquivo, na ordem especificada na variável de ambiente %PATHEXT% . Se houver vários arquivos chamados java.com , java.exe , java.bat , etc. em algum lugar no %Path% , somente o primeiro encontrado será usado.

Você pode ver a lista de extensões de caminhos executáveis em seu sistema criando o seguinte arquivo em lotes:

@echo off
echo %PATHEXT%
pause

Na minha máquina, estas são:

.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY

O que tudo isso significa?

Em strong contraste para outra variável de ambiente, o caminho do usuário não permite que você substitua o caminho do sistema. O exato oposto é o caso. Nos exemplos acima, há muitos casos em que você pode alterar a versão padrão do Java. No entanto, se já houver uma versão do Java listada no caminho do sistema, essa será a versão que SEMPRE será encontrada primeiro, porque o caminho é pesquisado em ordem, da esquerda para a direita, e o caminho do usuário é anexado à direita lado direito, com o caminho do sistema à esquerda.

O que posso fazer sobre isso?

Se você não tiver acesso às variáveis de ambiente do sistema, não poderá substituir os programas padrão no caminho do sistema usando o caminho do usuário. (Na verdade, deve ser desse modo, ou certos programas parariam de funcionar corretamente e abriria o sistema para adulteração por software malicioso. Ninguém quer isso.)

Em vez disso, você deve usar um caminho completo se precisar usar uma versão específica.

    
por 17.04.2018 / 11:28