如何判断应用程序是作为32位应用程序还是作为64位应用程序运行?

如何判断应用程序(在 VisualStudio2008中编译为 任何中央处理器)是作为32位应用程序还是作为64位应用程序运行?

28281 次浏览

我从 Martijn Boven中找到了这个代码:

public static bool Is64BitMode() {
return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}
if (IntPtr.Size == 8)
{
// 64 bit machine
}
else if (IntPtr.Size == 4)
{
// 32 bit machine
}

如果您使用的是 .NET4.0,那么它只是当前流程的一行程序:

Environment.Is64BitProcess

参考资料: < a href = “ http://msdn.microsoft.com/en-us/library/system.環.is64bitprocess.aspx”rel = “ noReferrer”> Environment. Is64BitProcess Property (MSDN)

这个来自 Microsoft All-In-One Code Framework 的代码示例可以回答您的问题:

在 C # (CSPlatformDetector)中检测进程运行平台

CSPlatformDetector 代码示例演示了以下任务 有关平台侦测的资料:

  1. 检测当前操作系统的名称
  2. 检测当前操作系统的版本
  3. 确定当前操作系统是否为64位操作系统。
  4. 确定当前进程是否为64位进程。
  5. 确定系统上运行的任意进程是否为64位。

如果只想确定当前运行的进程是否为64位 进程,则可以使用.NET 中新增的 环境。 Is64BitProcess属性 框架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;
}

在.Net 标准中,您可以使用 System.Runtime.InteropServices.RuntimeInformation.OSArchitecture