2008-11-05 108 views

回答

61
if (IntPtr.Size == 8) 
{ 
    // 64 bit machine 
} 
else if (IntPtr.Size == 4) 
{ 
    // 32 bit machine 
} 
+0

編譯器不在中間扮演什麼角色? – 2014-04-22 02:04:16

5

我發現這個代碼Martijn Boven該做的伎倆:

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

很可能更有效的調用IntPtr.Size代替Marshal.SizeOf(typeof運算(IntPtr的)) – JaredPar 2008-11-05 19:20:22

+2

我很樂意給+1到JaredPar的意見;我就是這麼做的...... – 2008-11-05 20:32:02

131

如果您使用.NET 4.0,這是一個班輪當前進程:

Environment.Is64BitProcess 

參考:Environment.Is64BitProcess Property(MSDN)

+1

感謝您發佈答案,這很瞭解。我不打算改變當前接受的答案,因爲這個問題最初是關於.NET 3.5的,但我會鼓勵人們爲你的答案投票。 – 2010-08-11 20:26:30

5

從微軟此代碼示例多功能一站式示例代碼庫可以回答你的問題:

Detect the process running platform in C# (CSPlatformDetector)

的CSPlatformDetector代碼示例演示了以下任務 與平臺檢測:

  1. 檢測當前操作系統的名稱。 (例如「Microsoft Windows 7 Enterprise」)
  2. 檢測當前操作系統的版本。 (例如「Microsoft Windows NT 6.1.7600.0」)
  3. 確定當前操作系統是否是64位操作系統。
  4. 確定當前進程是否是64位進程。
  5. 確定在系統上運行的任意進程是否爲64位。

如果你只是想確定是否當前運行的進程是一個64位 過程中,可以使用Environment.Is64BitProcess屬性,它是在.NET框架 4.

如果你新要檢測的系統 上運行任意應用是否是一個64位的過程中,你需要確定操作系統位數,如果是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; 
} 
0

在.net標準,你可以使用System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

相關問題