사용자 및 시스템 환경 변수 : 시스템 변수가 사용자 변수를 대체합니까?


21

랩톱에 대한 높은 권한을 가지고 있지만 관리자 권한은 없습니다. 시스템 환경 변수를 수정하려면 관리자 권한이 필요합니다. 시스템 환경 변수와 이름이 같은 사용자 환경 변수를 만들면 사용자 변수가 시스템 변수를 재정의하지만 실제로는 그렇지 않은 것으로 보입니다.

시스템 변수와 동일한 이름의 사용자 변수를 추가 한 후 새로운 cmd 창을 열고 echo 명령을 사용 하여 변수를 표시했습니다. 사용자 변수 값 대신 시스템 변수 값을 보여주었습니다.

나는 이것이 예상되는 행동인지 확인하고 그 이유를 이해하고 싶었습니다. 보다 구체적인 사용자 설정이 시스템 설정보다 우선합니다.

Windows 7이 있습니다.


변수를 변경할 때 종종 Windows를 완전히 다시 시작해야합니다. 설정에서 변수를 변경해도 실행중인 프로세스는 변경되지 않습니다. 새로운 프로세스는 프로세스가 시작되는 방법에 따라 실행중인 프로세스에서 환경을 복사하므로 프로세스를 시작한다고해서 새로운 환경을 얻게되는 것은 아닙니다.
Zoredache

재부팅 한 후에도 cmd.exe 창에서 "echo % path %"를 실행하면 사용자 변수 값이 아닌 시스템 환경 변수가 표시됩니다. 따라서 사용자 변수 o 관리자 액세스를 삭제하고 시스템 경로 변수를 변경했으며 동일한 echo cmd를 변경했습니다. 재부팅하지 않고 업데이트 된 env 값이 표시되었습니다. 이것은 USER vars가 시스템 vars를 무시하지 않으며 재부팅이 필요하지 않다는 것을 알려줍니다. Neitehr는 내가 기대했던 것입니다.
차드

시스템 변수와 동일한 이름의 사용자 변수추가하는 데 사용 된 절차는 무엇입니까 ? 같은 것 ?
JosefZ

JosefZ : 예, 링크에 표시된 화면과 유사한 Windows 7 GUI를 사용하여 동일한 이름을 가진 두 개의 환경 변수, 하나의 USER와 다른 SYSTEM을 모두 추가했습니다.
차드

@ 차드 당신이 대답이 당신의 경험과 정반대의 반대가 아닌가? 불일치를 어떻게 설명합니까?
RockPaperLizard

답변:


25

MSKB 기사 Windows NT의 환경 변수에 따르면 :

사용자 환경 변수는 시스템 환경 변수보다 우선합니다.

주목할만한 예외 중 하나 는 시스템과 사용자 변수 PATH결합 결과 인 변수입니다.

경로는 시스템 경로에서 구성되며 시스템 대화 상자의 시스템 환경 변수 필드에서 볼 수 있습니다. 사용자 경로는 시스템 경로에 추가됩니다.

이 기사에서는 LibPathOs2LibPath변수 확장에 대한 동일한 예외 와 지정된 변수의 autoexec.bat처리 방법에 대해서도 설명합니다 . 이러한 요점은 오늘날의 일반적인 환경에서는 거의 관련이 없습니다.

답변에 대한 크레딧


2
시스템 경로 앞에 사용자 경로를 만들 수 있습니까?
Qwerty

3

Twisty Impersonator 가 답변 에서 말한 모든 것이 정확합니다. 사용자 경로 변수가 추가되었다는 아이디어가 강조 표시되었으며 그 차이로 인해 추가 처리가 필요하다고 생각합니다.

경로 = % 경로 (시스템); % 경로 % (사용자)

당신이 (같은 또는 실행 스크립트 실행 프로그램 실행하면 .bat, .vbs등) 정규화 된 경로를 제공 할 필요가 없습니다.

예를 들어을 실행 java하려면 다음 중 하나를 입력하십시오.

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

java.exe -version

java -version

첫 번째 예는 완전한 경로를 사용합니다. 이것은 항상 정확한 경로에서 Java 버전을 사용합니다.

두 번째 예는 %Path%환경 변수 의 각 디렉토리를 살펴보고 실행 파일 이름을 찾습니다 java.exe. 발견 된 첫 번째 것을 실행하고 검색을 중지합니다. java.exe어딘가에 두 개의 파일이 있으면 %Path%처음 찾은 파일 만 사용됩니다.

세 번째 예는 두 번째 예와 같이에 나열된 디렉토리를 반복합니다 %Path%. 또한 파일 확장자가 제공되지 않았기 때문에 실행 파일 확장자 목록이 %PATHEXT%환경 변수에 지정된 순서대로 파일 이름에 추가됩니다 . 이름이 여러 개의 파일이있는 경우 java.com, java.exe, java.bat상의 등 어딘가에는 %Path%, 첫 번째 하나의 FOUND가 사용됩니다.

다음 배치 파일을 작성하여 시스템에서 실행 파일 경로 확장자 목록을 볼 수 있습니다.

@echo off
echo %PATHEXT%
pause

내 컴퓨터에서는 다음과 같습니다.

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

이 모든 것이 무엇을 의미합니까?

에서 대조적 다른 환경 변수, 사용자 경로는 시스템 경로를 재정의 할 수 없습니다. 정반대입니다. 위의 예에서 기본 버전의 Java를 변경해야 할 경우가 많습니다. 그러나 시스템 경로에 이미 Java 버전이 나열된 경우, 경로가 왼쪽에서 오른쪽으로 순서대로 검색되고 사용자 경로가 오른쪽에 추가되므로 항상 먼저 발견되는 버전입니다. 시스템 경로가 왼쪽에있는

어떻게해야합니까?

시스템 환경 변수에 액세스 할 수 없으면 사용자 경로를 사용하여 시스템 경로의 기본 프로그램을 대체 할 수 없습니다. (실제로 이런 방식 이어야합니다. 그렇지 않으면 특정 프로그램이 올바르게 작동하지 않고 시스템이 악성 소프트웨어에 의해 조작 될 수 있습니다. 아무도 원하지 않습니다.)

대신 특정 버전을 사용해야하는 경우 완전한 경로를 사용해야합니다.


1
시스템 경로 앞에 사용자 경로를 만들 수 있습니까?
Qwerty

1
그것은 다른 질문에 대한 좋은 주제가 될 것입니다. (이 사이트에서 빠른 검색을 수행해도 즉시 관련된 내용은 공개되지 않았습니다.) 새로운 질문을하고 의견에 여기에 대한 링크를 게시하십시오.
JonathanDavidArndt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.