目前我正在使用:
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("Select * FROM WIN32_Processor");
ManagementObjectCollection mObject = searcher.Get();
foreach (ManagementObject obj in mObject)
{
var architecture = obj.GetPropertyValue("Architecture");
}
architecture
= 0
此article表示0表示x86
计算机正在运行的处理器是intel core 2 duo E7500
操作系统是Windows XP 32位
CPU-Z显示
有没有办法确定Windows XP计算机是否有支持64位的处理器?
答案 0 :(得分:2)
它可能不太理想,但使用VC ++等创建(本机)DLL并直接查询处理器的功能相对简单。然后,可以从C#应用程序中启用此方法。
以下C ++方法在64位处理器上运行时返回true
,而在仅32位处理器上运行false
(无论操作系统是32位还是64位):
bool __declspec(naked) IsCPU64BitCapable()
{
__asm
{
// Save EBX since it's affected by CPUID
push ebx
// Determine whether the CPU supports retrieving extended feature data
mov eax, 0x80000000
cpuid
cmp eax, 0x80000000
// No extended data => no 64 bit
jbe no_extended_data
// Request extended feature data
mov eax, 0x80000001
cpuid
// Bit 29 of EDX will now indicate whether the CPU is 64 bit capable
mov eax, edx
shr eax, 29
and eax, 1
jmp extended_data
no_extended_data:
xor eax,eax
extended_data:
// Restore EBX
pop ebx
ret
}
}
然后可以使用以下方法从C#中使用此方法:
[DllImport("Test64Bit.dll")]
private static extern bool IsCPU64BitCapable();
答案 1 :(得分:1)
一个简单但不是万无一失的方法是检查注册表中的CPU,应该在HKLM\HARDWARE\DESCRIPTION\CentralProcessor\0
。
像
这样的东西var rk = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
if (rk.GetValue("Identifier").ToString().IndexOf("64") > 0)
{
// Is 64 bits
} else {
// Is 32 bits
}
不确定这是否足够
答案 2 :(得分:1)
此kb article可能会描述您所看到的内容。建议的解决方法是使用注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI
,其中将有一个处理器友好名称的密钥。您可以根据友好名称是否包含Intel64或x86来推断架构。