2009-03-27 4 views

답변

5

당신은 System.Management.ManagementObject를 사용하여 WMI 클래스 Win32_Processor을 조회 할 수 있습니다

ManagementObject mo; 
mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'"); 
ushort i = (ushort)mo["Architecture"]; 

switch (i) 
{ 
case 0: 
    return "32 Bit"; 
    break; 
case 9: 
    return "64 Bit"; 
    break; 
} 

는 다른 프로세서 코드에 대한 the MSDN Library description를 살펴 보자.

이 문제는 프로그램을 실행하는 사용자에게 WMI보기 권한이 필요하다는 점입니다. .NET 4.0 이상을 사용하는 사람들을위한

+2

관리자 권한없이 Win32_Processor 클래스 (PowerShell)를 쿼리 할 수 ​​있습니다. 또한 아키텍처 6 (Itanium)도 64 비트이기 때문에 아키텍처 대신 AddressWidth/DataWidth를 쿼리 할 수 ​​있습니다. x86 및 x86_64 만 있다고 가정하지 마십시오. – Joey

5

기본적으로 C#으로 확인하는 가장 쉬운 방법은 다음과 같습니다

var size = IntPtr.Size; 

크기는 동일합니다 중 4 또는 8 그러나 더 큰 문제는 이유를 알아야 할입니까?

+4

현재 프로세서가 어떤 종류의 프로세서인지 알려주지 않습니다. – Guffa

2

현재 응용 프로그램이 32 비트 응용 프로그램 또는 64 비트 응용 프로그램으로 실행되고 있는지 확인하려면 IntPtr.Size 속성 만 사용하십시오.

int bits = IntPtr.Size * 8; 

실제 프로세서에 대한 정보를 찾으려면 더 힘듭니다. 일부 정보를 가져 오는 Here is a library이지만 페이지는 특정 정보를 얻는 지 여부를 알려주지 않습니다. get some information from the registry 수 있습니다. 얼마나 많은 정보가 있는지 확인하지 않았습니다.

2

또한 P/Invoke를 사용하여 GetNativeSystemInfo을 호출하고 SystemInfo 구조를 얻을 수 있습니다.

isWow64 = false; 
if (System.Environment.OSVersion.Version.Major >= 5 && 
    System.Environment.OSVersion.Version.Minor >= 1) 
{ 
    var processHandle = GetProcessHandle((uint) 
      System.Diagnostics.Process.GetCurrentProcess().Id); 
    bool retVal; 
    if (!NativeMethods.IsWow64Process(processHandle, out retVal)) 
    { 
    throw (new Win32Exception()); 
    } 
    isWow64 = retVal; 
} 

대체 솔루션 (그러나 권장하지 않음) :

public bool Is64bitOS 
{ 
    get 
    { 
     return Environment.GetEnvironmentVariable("ProgramFiles(x86)") 
       != null; 
    } 
} 

public string ProgramFilesX86 
{ 
    get 
    { 
     string programFiles = 
      Environment.GetEnvironmentVariable("ProgramFiles(x86)"); 
     if (programFiles == null) 
     { 
      programFiles = Environment.GetEnvironmentVariable(
          "ProgramFiles"); 
     } 

     return programFiles; 
    } 
} 
3
당신은 CPU를 얻을 수

(비아 :

또 다른 해결책은 다음과 같습니다 more) 레지스트리 정보 :

HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor 

각 하위 키에는 0, 1, 2 등의 하위 키가 하나 이상 있습니다 (각 코어에 하나씩). 각 하위 키에는 프로세서 제품군 및 모델을 포함하여 x86 또는 텍스트의 일부 64 비트를 포함하는 식별자가 포함되어 있습니다.

+0

이것은 올바르지 만 Windows 시스템에서만 가능합니다. 나는 이것이 Silverlight, Phone 7 어플리케이션, 또는 모노/리눅스에서 실행되는 어플리케이션에서 작동하지 않을 것이라고 생각합니다. – matt

0
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo); 

     public static bool Is64Bit() 
     { 
      bool retVal; 

      IsWow64Process(Process.GetCurrentProcess().Handle, out retVal); 

      return retVal; 
     } 
+0

환경에 문제가 있습니까? 64BitOperatingSystem? –

관련 문제