22

WMI クラス Win32_OperatingSystem には Windows Vista の OSArchitecture しか含まれていないため、レジストリを使用して現在のシステムが 32 ビット システムか 64 ビット システムかを判断する方法をすぐに作成しました。

private Boolean is64BitOperatingSystem()
{
    RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
    String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE");

    if (processorArchitecture.Equals("x86")) {
        return false;
    }
    else {
        return true;
    }
}

これまでのところ、かなりうまくいっていますが、レジストリを調べるのがどれほど好きかはわかりません。これはかなり標準的な方法ですか、それともより良い方法がありますか?

編集:うわー、そのコードはプレビューでもっときれいに見えます. 次回は、ペーストビンか何かへのリンクを検討します。

4

4 に答える 4

8

Raymond Chens のソリューションを見てみましょう。

64 ビット Windows で実行しているかどうかをプログラムで検出する方法

.NET の PINVOKE は次のとおりです。

IsWow64Process (kernel32)

更新:「x86」のチェックに問題があります。インテルまたは AMD の次の 32 ビット プロセッサがどのように指定されるかは誰にもわかりません。確率は低いですが、危険です。外界に対して不透明と見なされる可能性のある OS バージョン/プラットフォーム固有の値を照会するのではなく、正しい API を介してこれを判断するよう OS に依頼する必要があります。自問自答してください。1 - 関連するレジストリ エントリは MS によって適切に文書化されていますか? 32 ビットまたは 64 ビット。答えが「いいえ」の場合は、API を呼び出してください。ええ、それは長くなりますが、文書化されており、決定的です。

于 2008-08-06T19:49:35.727 に答える
2

.NET で 64 ビットをテストする最も簡単な方法は、IntPtr.Size の値を確認することです。

WOW で実行されている 32 ビット アプリの場合、IntPtr.Size の値は 4 だと思いますね。

編集:@編集:ええ。:)

于 2008-08-06T20:07:33.587 に答える
1

アプリケーションのユーザーが常に必要なものにアクセスできることが確実である限り、レジストリを調べることは完全に有効です。

于 2008-08-06T19:48:05.153 に答える
1

.NET で 64 ビットをテストする最も簡単な方法は、IntPtr.Size の値を確認することです。

編集:おお!これにより、OS 全体ではなく、現在のプロセスが 64 ビットであるかどうかがわかります。ごめん!

于 2008-08-06T20:01:58.450 に答える