출처 : Howto : Detect OS Architecture with C#


I’ve had a problem in one of the utility applications/scripts I’ve been developing, I had to find out the Operating System Architecture, where application was running, here is the process I’ve used to do so:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:   
   5:  namespace SystemUtilities
   6:  {
   7:   // Enum to describe OS Architecture.
   8:   public enum OSArchitecture
   9:   {
  10:     X84,
  11:     X64
  12:   }
  13:   // Class to retrieve specific OS Variables. 
  14:   // And detect specific enviroiment conditions.
  15:   public class OSUtilities
  16:   {
  17:     // Function returns type of OS Architecture.
  18:     public OSArchitecture GetOSArchitecture()
  19:     {
  20:      if ( Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "AMD64" 
  21:        || Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "IA64"
  22:        || Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432") == "AMD64"
  23:        || Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432") == "IA64" )
  24:      { return OSArchitecture.X64; }
  25:   
  26:      return OSArchitecture.X84;
  27:     }
  28:   }
  29:  }






cf) 참고

 OS Architecture 정보 즉 x86, x64 인지에 대한 정보는 레지스트리 HKLM\System\CurrentControlSet\Control\Session Manager\Environment 키의 PROCESSOR_ARCHITECTURE 값을 조사해도 알 수 있다. 또한 BCL System.Environment 정적 클래스를 이용하여 구할 수 도 있다. Environment.GetEnvironmentVariable 메소드를 이용하여 구할 수 있는데 약간 주의를 해주어야 한다. PROCESSOR_ARCHITECTURE 환경 변수값을 조사하면 OS Architecture 가 x86인 경우 "x86" 문자열 값을 구할 수 있지만 OS Architecture 가 x64 인 경우 구해지는 값은 "AMD64" 또는 "IA64" 값을 얻는다. 따라서 PROCESS_ARCHITECTURE 값이 "AMD64", "IA64" 인 경우 OS ARCHITECTURE가 x64이다. 
 Environment.GetEnvironmentVariable 의 두번째 매개변수로 타겟을 지정해 줄 수 있는데, 이 매개변수를 지정해 주지 않으면 실행시킨 프로세서를 기준으로 값이 얻어지므로 EnvironmentVariableTarget.Machine 을 이용해 주자.



Posted by six605
,