programing

프로그램 파일 x86 env 변수를 가져오는 방법은 무엇입니까?

procenter 2023. 7. 9. 22:34
반응형

프로그램 파일 x86 env 변수를 가져오는 방법은 무엇입니까?

명령 프롬프트에서 프로그램 파일(x86)의 위치를 표시하는 방법을 알고 싶습니다.Windows 7 64비트를 사용하고 있습니다.

시도해 봤습니다.

echo %programfiles(x86)%그리고.echo %programfiles%.

이 두 출력 모두C:\Program Files

제가 수동으로 레지스트리를 확인했을 때,
HKLM/소프트웨어/마이크로소프트/윈도우즈/현재 버전,
programfilesdir을 가리키는 말.C:\Program Files그리고.

HKLM/소프트웨어/WOW64/마이크로소프트/윈도우즈/현재 버전,
programfilesdir을 가리키는 말.C:\Program Files (x86).

하지만, 왜 나는 항상 보는 것입니다.C:\Program Files표시됩니까?

64비트 모드로 실행 중인 64비트 시스템에서는 다음을 수행합니다.

  • echo %programfiles%==>C:\Program Files
  • echo %programfiles(x86)%==>C:\Program Files (x86)

32비트(WOW64) 모드로 실행되는 64비트 시스템의 경우:

  • echo %programfiles%==>C:\Program Files (x86)
  • echo %programfiles(x86)%==>C:\Program Files (x86)

32비트 모드로 실행 중인 32비트 시스템에서:

  • echo %programfiles%==>C:\Program Files
  • echo %programfiles(x86)%==>%programfiles(x86)%

또 다른 관련 환경 변수는 다음과 같습니다.

%ProgramW6432%

32비트(WOW64) 모드로 실행되는 64비트 시스템에서는 다음을 수행합니다.

  • echo %program files% ==> C:\Program Files (x86)
  • echo %program files (x86) % ==> C:\Program Files (x86)
  • echo %Program W6432% ==> C:\Program Files

Wikipedia에서:

%ProgramFiles% 변수는 Windows 및 기타의 설치된 모든 프로그램을 저장하는 ProgramFiles 디렉토리를 가리킵니다.영어 시스템의 기본값은 "C:\프로그램 파일".64비트 버전의 Windows(XP, 2003, Vista)에서는 %ProgramFiles(x86)%도 있으며 기본값은 "C:\Program Files(x86)" 및 %ProgramW6432%. 기본값은 "C:\프로그램 파일".%ProgramFiles% 자체는 환경 변수를 요청하는 프로세스 자체가 32비트인지 64비트인지에 따라 달라집니다(Windows-on-Windows 64비트 리디렉션으로 인해 발생함).

참조: http://en.wikipedia.org/wiki/Environment_variable

윈도우즈 64비트 시스템에서 에코 %program files(x86)%는 C:\Program Files(x86)를 인쇄합니다.

64비트 윈도우즈 시스템에서 다양한 환경 변수와 일부 윈도우즈 레지스트리 키의 읽기는 읽기 프로세스가 32비트인지 64비트인지에 따라 다른 소스로 리디렉션됩니다.

아래 표에는 다음 데이터 원본이 나열되어 있습니다.

X = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
Y = HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion
Z = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
     
READING ENVIRONMENT VARIABLES:    Source for 64-bit process               Source for 32-bit process
-------------------------------|----------------------------------------|--------------------------------------------------------------
                %ProgramFiles% :  X\ProgramW6432Dir                       X\ProgramFilesDir (x86)
           %ProgramFiles(x86)% :  X\ProgramFilesDir (x86)                 X\ProgramFilesDir (x86)
                %ProgramW6432% :  X\ProgramW6432Dir                       X\ProgramW6432Dir
     
          %CommonProgramFiles% :  X\CommonW6432Dir                        X\CommonFilesDir (x86)
     %CommonProgramFiles(x86)% :  X\CommonFilesDir (x86)                  X\CommonFilesDir (x86)
          %CommonProgramW6432% :  X\CommonW6432Dir                        X\CommonW6432Dir
     
                 %ProgramData% :  Z\ProgramData                           Z\ProgramData


      READING REGISTRY VALUES:    Source for 64-bit process               Source for 32-bit process
-------------------------------|----------------------------------------|--------------------------------------------------------------
             X\ProgramFilesDir :  X\ProgramFilesDir                       Y\ProgramFilesDir
       X\ProgramFilesDir (x86) :  X\ProgramFilesDir (x86)                 Y\ProgramFilesDir (x86)
            X\ProgramFilesPath :  X\ProgramFilesPath = %ProgramFiles%     Y\ProgramFilesPath = %ProgramFiles(x86)%
             X\ProgramW6432Dir :  X\ProgramW6432Dir                       Y\ProgramW6432Dir
     
              X\CommonFilesDir :  X\CommonFilesDir                        Y\CommonFilesDir
        X\CommonFilesDir (x86) :  X\CommonFilesDir (x86)                  Y\CommonFilesDir (x86)
              X\CommonW6432Dir :  X\CommonW6432Dir                        Y\CommonW6432Dir
     

예를 들어 32비트 프로세스의 경우 데이터 소스는%ProgramFiles%그리고.%ProgramFiles(x86)%환경 변수는 레지스트리 값입니다.HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86).

그러나 64비트 프로세스의 경우 데이터 소스는%ProgramFiles%환경 변수는 레지스트리 값입니다.HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir의 데이터 및 ...에 데이터 소스그리고 데이터 소스는 다음과 같습니다.%ProgramFiles(x86)% 입니다.HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)

에서는 "윈도우즈 기본다의같음과은포다문니함합을자열대부분치"와 같은 합니다.C:\Program Files (x86) 값으로HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)그러나 이것(및 기타)은 변경될 수 있습니다.

이러한 Windows 레지스트리 값에 입력된 내용은 Windows 탐색기에서 로그인 시 해당 환경 변수로 읽은 다음 하위 프로세스에 복사되어 나중에 생성됩니다.

값은 다음과 같습니다.HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesPath에서 Windows 치대의 이부입을 력문때기 하만특다 합주니목히문할에분라는 을 입력하므로 특히 주의해야 합니다.%ProgramFiles%64비트 프로세스에서 읽을 수 있습니다. 이 열 환 변 참 니 합 다 조를 참조합니다.%ProgramFiles% 값 그결과, 값트리데이에가에서 데이터를 .HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir 프로그램이 이하지 않는 한...일부 프로그램이 이 환경 변수의 값을 변경하지 않는 한.

64비트 및 32비트 프로세스의 환경 변수를 표시하는 작은 유틸리티를 작성했습니다.여기서 다운로드할 수 있습니다.
및 실행 은 VisualStudio 2017 ...\x64\Release그리고...\x86\Release각각 다음과 같다.

IMHO, 이 토론에서 빠진 한 가지 점은 사용하는 변수가 무엇이든 항상 적절한 폴더를 가리키도록 보장된다는 것입니다.C:\ 이외의 드라이브에 Windows가 설치되어 있는 드문 경우에는 이 문제가 중요합니다.

언급URL : https://stackoverflow.com/questions/9594066/how-to-get-program-files-x86-env-variable

반응형