2

目前我正在使用:

ManagementObjectSearcher searcher = 
                   new ManagementObjectSearcher("Select * FROM WIN32_Processor");
ManagementObjectCollection mObject = searcher.Get();

foreach (ManagementObject obj in mObject)
{
  var architecture = obj.GetPropertyValue("Architecture");
}

architecture= 0

这篇文章显示0表示x86

电脑运行的处理器是intel core 2 duo E7500

操作系统是 Windows XP 32 位

CPU-Z 显示

在此处输入图像描述

有没有办法确定 Windows XP 计算机是否具有支持 64 位的处理器?

4

3 回答 3

2

这可能并不理想,但使用 VC++ 等创建(本机)DLL 并直接查询处理器的功能相对简单。然后可以从您的 C# 应用程序中 PInvoked 此方法。

true当在支持 64 位的处理器和false仅 32 位的处理器(无论操作系统是 32 位还是 64 位)上运行时,以下 C++ 方法将返回:

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();
于 2012-10-31T20:51:23.930 回答
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
}

不知道这对你来说是否足够

于 2012-10-31T18:01:21.087 回答
1

这篇kb 文章可能会描述您所看到的内容。建议的解决方法是转到注册表项,在该注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI下将有一个带有处理器友好名称的键。您可以根据友好名称是否包含 Intel64 或 x86 来推断架构。

于 2012-11-01T00:18:51.827 回答