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 です。

OSはWindows XP 32ビットです

CPU-Zショー

ここに画像の説明を入力

Windows XP コンピュータに 64 ビットをサポートするプロセッサがあるかどうかを確認する方法はありますか?

4

3 に答える 3

2

理想的ではないかもしれませんが、VC ++などを使用して(ネイティブ)DLLを作成し、プロセッサの機能を直接クエリするのは比較的簡単です。このメソッドは、C#アプリケーションからPInvokedできます。

次のC++メソッドはtrue、64ビット対応のプロセッサおよびfalse32ビットのみのプロセッサ(OSが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();
于 2012-10-31T20:51:23.930 に答える
1

このkbの記事は、あなたが見ているものを説明しているかもしれません。推奨される回避策はHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI、プロセッサのフレンドリ名を持つキーが存在するレジストリキーを使用することです。フレンドリ名にIntel64とx86のどちらが含まれているかからアーキテクチャを推測できます。

于 2012-11-01T00:18:51.827 に答える
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 に答える