web-dev-qa-db-ja.com

アプリケーションが32ビットアプリケーションと64ビットアプリケーションのどちらで実行されているかを確認するにはどうすればよいですか?

アプリケーション(Visual Studio 2008でAny CPとしてコンパイル)が32ビットまたは64ビットアプリケーションとして実行されているかどうかを確認するにはどうすればよいですか?

61
if (IntPtr.Size == 8) 
{
    // 64 bit machine
} 
else if (IntPtr.Size == 4) 
{
    // 32 bit machine
}
63
Perica Zivkovic

。NET 4.0を使用している場合、これは現在のプロセスの1行です。

Environment.Is64BitProcess

参照:Environment.Is64BitProcessプロパティ(MSDN)

143
Sam

私はこのコードを Martijn Boven から見つけました:

public static bool Is64BitMode() {
    return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}
5

Microsoft All-In-One Code Frameworkの次のコードサンプルは、あなたの質問に答えることができます。

C#でプラットフォームを実行しているプロセスを検出します(CSPlatformDetector)

CSPlatformDetectorコードサンプルは、プラットフォーム検出に関連する以下のタスクを示しています。

  1. 現在のオペレーティングシステムの名前を検出します。 (例:「Microsoft Windows 7 Enterprise」)
  2. 現在のオペレーティングシステムのバージョンを検出します。 (例:「Microsoft Windows NT 6.1.7600.0」)
  3. 現在のオペレーティングシステムが64ビットオペレーティングシステムかどうかを確認します。
  4. 現在のプロセスが64ビットプロセスかどうかを確認します。
  5. システムで実行されている任意のプロセスが64ビットかどうかを確認します。

現在実行中のプロセスが64ビットプロセスであるかどうかを確認するだけの場合は、.NET Framework 4の新しい Environment.Is64BitProcess プロパティを使用できます。

システムで実行されている任意のアプリケーションが64ビットプロセスかどうかを検出する場合は、OSのビット数を確認する必要があります。64ビットの場合は、ターゲットプロセスハンドルを指定してIsWow64Process()を呼び出します。 :

static bool Is64BitProcess(IntPtr hProcess)
{
    bool flag = false;

    if (Environment.Is64BitOperatingSystem)
    {
        // On 64-bit OS, if a process is not running under Wow64 mode, 
        // the process must be a 64-bit process.
        flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag);
    }

    return flag;
}
5
Scott Ge

.Net StandardではSystem.Runtime.InteropServices.RuntimeInformation.OSArchitectureを使用できます

0
Owen Pauling