Eu tenho direitos elevados no meu laptop, mas não direitos de administrador. São necessários direitos de administrador para modificar variáveis de ambiente do sistema. Eu esperava que, se eu criasse uma variável de ambiente do usuário com o mesmo nome que uma variável de ambiente do sistema, a variável do usuário substituiria a variável do sistema, mas isso não parece ser o caso.
Depois de adicionar uma variável de usuário com o mesmo nome que uma variável de sistema, abri uma nova janela cmd e usei o comando echo para exibir a variável. Ele me mostrou o valor da variável do sistema em vez do valor da variável do usuário.
Eu só queria confirmar que esse comportamento é esperado e entender o raciocínio por trás dele. Eu esperaria que a configuração mais específica do usuário substituísse a do sistema.
Eu tenho o Windows 7.
Respostas:
De acordo com o artigo MSKB Variáveis de ambiente no Windows NT :
Uma exceção notável é a
PATH
variável que é um resultado combinado das variáveis do sistema e do usuário:O artigo também discute exceções idênticas para a expansão das variáveis
LibPath
eOs2LibPath
, além de comoautoexec.bat
são tratadas as especificadas em . Esses pontos provavelmente encontrarão pouca relevância nos ambientes típicos de hoje.Crédito para esta resposta SO
fonte
Tudo o que o Twisty Impersonator disse em sua resposta está correto. A ideia de que a variável de caminho do usuário está anexada foi destacada e acredito que as consequências dessa diferença requerem algum tratamento adicional.
Quando você executar um programa executável (ou qualquer script executável, como
.bat
,.vbs
, etc.) você não precisa fornecer o caminho totalmente qualificado.Por exemplo, para executar
java
, você pode digitar qualquer um destes:O primeiro exemplo usa um caminho completo. Isso sempre usará a versão do Java nesse caminho exato.
O segundo exemplo examinará cada um dos diretórios da
%Path%
variável de ambiente, procurando um arquivo executável chamadojava.exe
. Ele executará o primeiro encontrado e interromperá a pesquisa. Se houver dois arquivos nomeadosjava.exe
em algum lugar no%Path%
, apenas o primeiro encontrado será usado.O terceiro exemplo, como o segundo, irá percorrer os diretórios listados em
%Path%
. Além disso, como uma extensão de arquivo não foi fornecida, uma lista de extensões de arquivo executáveis é anexada ao nome do arquivo, na ordem especificada na%PATHEXT%
variável de ambiente. Se houver vários arquivos nomeadosjava.com
,java.exe
,java.bat
, etc. em algum lugar no%Path%
, apenas o primeiro encontrado é usado.Você pode ver a lista de extensões de caminho executável em seu sistema, criando o seguinte arquivo em lotes:
Na minha máquina, são eles:
O que tudo isso significa?
Dentro forte contraste com outras variáveis de ambiente, o caminho do usuário não permite substituir o caminho do sistema. O oposto exato é o caso. Dos exemplos acima, existem muitos casos em que você pode alterar a versão padrão do Java. No entanto, se já existe uma versão Java listada no caminho do sistema, essa é a versão que SEMPRE será encontrada primeiro, porque o caminho é pesquisado na ordem, da esquerda para a direita, e o caminho do usuário é anexado à direita lado esquerdo, 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. (De fato, deve ser assim, ou certos programas parariam de funcionar corretamente e abririam seu sistema a adulteração de software malicioso. Ninguém quer isso.)
Em vez disso, você deve usar um caminho completo se precisar usar uma versão específica.
fonte