태그 보관물: environment-variables

environment-variables

Windows 8 명령 줄이 경로를 업데이트하지 않는 이유 경로를 입력 할 수 없습니다 (첨부

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을 사용하지 않습니다. 이 문제에 대한 테스트와 실험을 계속할 수있는 환경이 없습니다. 아직이 문제에 대한 답이나 해결책이 없습니다. 아래의 답변으로 문제가 해결되지 않았습니다.



답변

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

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

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

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


답변

올린 사람 : 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 파일을 수정하고 재부팅하는 것입니다.


답변

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

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

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

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

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

echo $env:JAVA_HOME

또는

Get-ChildItem env

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


답변

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


답변

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


답변

그의 말에. 하나. 이 문제의 피해자 일 수 있습니다 . Windows에서 사용자 변수가 올바르게 해결되지 않습니다 .


답변

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