Windows 8 명령 줄이 경로를 업데이트하지 않는 이유


21

PATH 변수에 새 항목을 추가해야했습니다. 이것은 내 일에서 일반적인 활동이지만 최근에 Windows 8을 사용하기 시작했습니다. 프로세스가 Windows 7, Vista, XP와 비슷하다고 가정했습니다 ...

이벤트 순서는 다음과 같습니다.

  1. 시스템 속성을여십시오 (시작-> [유형 "제어판"]-> 제어판 \ 시스템 및 보안 \ 시스템-> 고급 시스템 설정-> 환경 변수)
  2. USER PATH 변수의 시작 부분 에 새 경로를 추가하십시오 (C : \ dev \ Java \ apache-ant-1.8.4 \ bin;)
  3. 명령 프롬프트를 열었습니다 (시작-> [ "명령 프롬프트 입력"입력]-> "경로 입력"입력)

새 경로를 입력 할 수 없습니다 (첨부 된 이미지 및 비디오 참조). Windows 7 컴퓨터에서 똑같은 프로세스를 복제하여 작동했습니다.

환경 변수의 화면 잡기

편집하다

Windows 8 환경 변수 및 명령 프롬프트 비디오

편집하다

이것은 Windows 7의 동작이 아닙니다. Windows 7에서 작동 할 것으로 예상 되는 동작을 보려면이 비디오를보십시오 . http://youtu.be/95JXY5X0fII

2013 년 5 월 31 일 편집

그래서 많은 좌절을 겪은 후 작은 C # 앱을 작성하여 WM_SETTINGCHANGE이벤트 를 테스트했습니다 . 이 코드는 Windows 7과 Windows 8에서 이벤트를받습니다. 그러나 시스템의 Windows 8에서는 올바른 경로를 얻지 못합니다. 그러나 Windows 7에서는 그렇게합니다. 다른 Windows 8 시스템에서는 재현 할 수 없습니다.

다음은 C # 코드입니다.

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        SystemEvents.UserPreferenceChanging += new UserPreferenceChangingEventHandler(OnUserPreferenceChanging);

        Console.WriteLine("Waiting for system events.");
        Console.WriteLine("Press <Enter> to exit.");
        Console.ReadLine();
    }

    static void OnUserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
        Console.WriteLine("path={0}", System.Environment.GetEnvironmentVariable("PATH"));
    }
}

OnUserPreferenceChanging 에 해당 WM_SETTINGCHANGE

Windows 7에서 실행되는 C # 프로그램 (이벤트가 발생하고 올바른 경로를 선택하는 것을 볼 수 있음)

Windows 8에서 실행되는 C # 프로그램 (이벤트가 발생하지만 잘못된 경로가 표시됨)

내 환경에 대해이 문제를 강요하는 것이 있습니다. 그러나 이것은 Windows 8 버그입니까?

2014-04-28 수정

이 문제와 다른 여러 가지 문제로 인해 더 이상 데스크톱에서 Windows 8을 사용하지 않습니다. 이 문제에 대한 테스트와 실험을 계속할 수있는 환경이 없습니다. 아직이 문제에 대한 답이나 해결책이 없습니다. 아래의 답변으로 문제가 해결되지 않았습니다.


2
변경 사항을 적용한 후 재부팅해야한다고 생각합니다.
Enigma

@Enigma 왜? Windows 7, Vista, XP, 2000에서 재부팅 할 필요가 없었습니다.
mawcsco

@mawcsco 최소한 7 번은 했어요. 시작 메뉴에서 명령 프롬프트를 열면 탐색기 셸의 환경과 함께 시작됩니다. 탐색기 셸은 로그인 할 때로드되었습니다. 탐색기를 종료 / 재시작하거나 로그 아웃하거나 다시 로그인하거나 시스템을 다시 시작해야합니다.
다스 안드로이드

1
@Enigma 재부팅 할 필요가 없습니다. serverfault.com/questions/8855/…
mawcsco

1
방금 Windows 7과 Windows 8에서 이것을 확인했습니다. 어느 경우이든 cmd새 인스턴스가 시작될 때 새 환경 변수가 표시됩니다 . 물론 이미 실행중인 cmd환경은 업데이트 된 환경을 얻지 못했습니다.
Alexey Ivanov

답변:


7

시작 메뉴에서 명령 프롬프트 또는 작업 표시 줄의 바로 가기를 시작하는 경우 다음 중 하나를 수행해야합니다.

  • 다시 시작하십시오 explorer. 그것을 죽이고 다시 시작하십시오.
  • 로그 아웃했다가 다시 시작합니다 (효과적으로 다시 시작 explorer).
  • 효과적으로 다시 시작하는 시스템을 다시 시작하십시오 explorer.

explorer로그인시 시스템에 의해 시작 되는를 제외하고 환경이 상위 프로세스에서 상속되므로 환경이 즉시 업데이트되지 않습니다 . 이것이 내 Windows 7 시스템에서 작동하는 방식입니다.

따라서 환경 변수를 변경하면 레지스트리 키가 업데이트되지만 시스템이 일부 프로세스가 시작될 때 새 로그인 환경을 구축해야 할 때까지이 키를 다시 읽지 않습니다. 대부분의 경우 프로세스는 이미 환경이있는 프로세스의 하위 프로세스이므로 환경이 상속되므로 발생하지 않습니다.


2
Windows 7의 경우 절대적으로 거짓입니다. 위의 게시물에 링크 된 비디오를 참조하십시오.
mawcsco

1
허. 이전에 Win 7의 새 콘솔 창에 즉시 변경 사항이 적용되지는 않았지만 확실히 맞습니다. 그래도 정확한 워크 플로가 무엇인지 기억할 수 없습니다. 그때까지 아무도 당신에게 답을 찾지 못하면 집에 돌아올 때 Win 8 시스템을 가지고 놀아 볼 것입니다.
다스 안드로이드

5
시스템 특성 대화 상자를 사용하여 환경 변수를 변경 한 경우 변경 사항이 현재 실행중인 Explorer 인스턴스에 즉시 적용되고 이후에 시작된 모든 프로세스는 새 환경을 얻습니다. 이미 실행중인 프로세스는 WM_SETTINGCHANGE메시지 를 처리하지 않는 한 환경 변수를 자동으로 업데이트하지 않습니다 .
Alexey Ivanov

1
친구, 이것은 어쨌든 내가 겪고있는 문제를 이해하는 데 도움이되었습니다. AutoHotkey를 사용하여 명령 프롬프트를 시작했는데 autohotkey를 다시 시작할 때까지 작동하지 않았습니다!
Moss

1
@mawcsco Windows 7을 사용하고 있습니다.
laike9m

3

올린 사람 : http://support.microsoft.com/kb/104011 를 통해 /server//q/8855/158027

...

그러나 환경 변수를 수정해도 즉시 변경되는 것은 아닙니다. 예를 들어, 변경 후 다른 명령 프롬프트를 시작하면 환경 변수에 이전 (현재 아님) 값이 반영됩니다. 로그 오프했다가 다시 로그온 할 때까지 변경 사항이 적용되지 않습니다.

로그 오프하지 않고 이러한 변경 사항을 적용하려면 WM_SETTINGCHANGE 메시지를 시스템의 모든 창에 브로드 캐스트하여 Windows 탐색기, 프로그램 관리자, 작업 관리자, 제어판 등과 같은 관심있는 응용 프로그램이 업데이트를 수행 할 수 있도록하십시오. 추가 정보


예를 들어, Windows NT 기반 시스템에서 다음 코드 단편은 변경 사항을 명령 프롬프트에 사용 된 환경 변수에 전파해야합니다.

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    (LPARAM) "Environment", SMTO_ABORTIFHUNG,
    5000, &dwReturnValue);

Windows 탐색기 및 프로그램 관리자를 포함하여 Windows 95 및 Windows 98과 함께 제공되는 응용 프로그램은이 메시지에 응답하지 않습니다. 따라서이 문서는 기술적으로 Windows 95 및 Windows 98에서 구현 될 수 있지만 타사 응용 프로그램에 알리는 것 외에는 아무런 효과가 없습니다. Windows 95에서 전역 환경 변수를 변경하는 유일한 방법은 autoexec.bat 파일을 수정하고 재부팅하는 것입니다.


2
Windows 7의 Windows 탐색기가이 메시지를 처리하므로 작업 표시 줄 또는 시작 메뉴에서 명령 프롬프트를 다시 시작하면됩니다.
Alexey Ivanov

"해당 컴퓨터에 대한 기본 속성 대화 상자를 통해 변경하면 환경 변수에 대한 변경 사항이 즉시 적용됩니다 (내 컴퓨터 | 속성 | 고급 | 환경 변수로 이동). 변경 내용이 저장된 후 탐색기는 WM_SETTINGCHANGE 메시지를 브로드 캐스트합니다. 모든 창에 변경 사항을 알리기 위해 serverfault.com/questions/8855/…
mawcsco

2
"시스템 팁이 문서는 사용중인 것과 다른 Windows 버전에 적용됩니다.이 문서의 내용은 사용자와 관련이 없을 수 있습니다. Windows 8 솔루션 센터를 방문하십시오"
mawcsco

이것이 구현 세부 사항이며 Microsoft가 Windows 8 이상 에서이 동작을 지원할 의도가 없다는 사실은 놀랄 일이 아닙니다.
surfasb

1

문제는 사용자 설정에 있습니다. Window 8에서 각 사용자는 자신의 환경 변수를 가지고 있습니다.

시스템 속성을여십시오 (시작-> [유형 "제어판"]-> 제어판 \ 시스템 및 보안 \ 시스템-> 고급 시스템 설정-> 환경 변수)

위의 접근 방식은 현재 사용자가 아닌 루트 사용자의 환경 변수를 편집합니다.

사용자 계정으로 이동-> 현재 계정 선택-> 환경 변수 변경

변경 후 전원 쉘을 다시 시작하십시오. 그때

echo $env:JAVA_HOME

또는

Get-ChildItem env

이것이 도움이되기를 바랍니다.


"스크린 샷 및 비디오에서"mwillia3의 사용자 변수 "대화 상자를 표시하는 세부 정보를 놓친 것 같습니다. 그게 내 사용자 이름입니다. 올바른 환경 변수를 편집하고 있음을 확실히 알고 있습니다. C # 앱은 업데이트 된 값이 아닌 이전 값으로 이벤트를 시작합니다. 나는 포기 했어. 나는 이것이 Win 8 버그라고 확신하며 더 이상 이것을 테스트하기 위해 Windows 8에 액세스 할 수 없습니다.
mawcsco

어떤 사람들은 항상 세부 사항을 읽지 않습니다. 일부 시스템에서는 볼 수 있지만 다른 시스템에서는 볼 수 없으며 Windows 7/2008에서도 볼 수 있습니다. 내가 찾은 때 운율이나 이유가 없습니다.
ferventcoder

WM_SETTINGSCHANGED를 전파 한 후에도 Windows Server 2012 r2와 동일한 문제입니다. 나는 그것이 Windows 버그라고 생각합니다.
vezenkov

0

SET 대신 SETX를 사용해보십시오. 예 :SETX PATH "%PATH%;MyPath"


1
당신은 설명 할 이유 SETX 보다는 SET작품.
ChrisF

먼저 명령 행을 사용하지 않고 시스템 대화 상자를 사용했습니다. 둘째, Windows 7에서는 동작 패턴이 제대로 작동하지만 때로는 Windows 8에서는 작동하지 않습니다. SET와 SETX가 Windows 7과 Windows 8간에 어떻게 바뀌 었는지 보여주는 설명서를 참조 할 수 있습니까?
mawcsco

0

Windows 8.1을 사용하는 경우 관리자 권한으로 명령 프롬프트를 연 다음 PATH 명령을 호출하면 여기에 표시됩니다. 일반 cmd로 돌아 가면 표시됩니다. 사실, 명령 프롬프트에서 추가 된 응용 프로그램을 시작할 수 있어야합니다.



-1

바탕 화면에서 Win + R을 사용하여 cmd.exe를 시작하면 작동합니까? 내 생각에 시작 화면에서 시작하면 시작 된 cmd.exe의 부모가 explorer.exe (WSAHost.exe, IIRC 또는 명명 된 것)와 다르고 부모 프로세스는 WM_SETTINGCHANGE 메시지 중에 환경을 업데이트하지 않습니다. 테스트 할 Windows 8 머신이 없습니다 ...


Windows 8에서도 시작 화면 UI는 explorer.exe가 종료되면 사라지기 때문에 explorer.exe의 일부인 것으로 보입니다.
binki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.