在C#中如何知道我的处理器是32位还是64位?
在C#中本地检查的最简单方法是:
var size = IntPtr.Size;
size的值将等于4或8,但更重要的问题是你为什么需要知道呢?
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;
}
请查看MSDN Library描述以获取其他处理器代码。
这样做的一个问题是运行程序的用户需要具有查看WMI的权限。
您可以从注册表中获取CPU(和更多)信息:
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor
有一个或多个子键(每个核心一个)称为0、1、2等。每个子键都包含有关核心的信息,包括标识符,其中包含x86或某些64位文本,包括处理器系列和型号。
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;
}
}
[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;
}