출처 : 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 을 이용해 주자.