【问题标题】:How to know in run time if i'm on x86 or x64 mode in c# [duplicate]如何在运行时知道我在 c# 中是处于 x86 还是 x64 模式 [重复]
【发布时间】:2011-06-30 14:33:43
【问题描述】:

可能重复:
How do I tell if my application is running as a 32 or 64 bit application?

我在 c# (Framework 3.5 SP1) 中有一个应用程序,我需要在运行时加载一个非托管程序集,但是有两个不同的版本,一个用于 x86,另一个用于 x64,所以我需要在运行时知道哪个模式是应用程序正在运行

我已经看到了这个POST,但它是针对 C++ 的,有没有更简单的方法在 C# 中做到这一点?或者我如何在 C# 中做到这一点?

谢谢

【问题讨论】:

标签: c# .net x86 64-bit


【解决方案1】:

使用 .NET 4.0 中引入的 System.Environment.Is64BitOperatingSystem 属性。 According to MSDN:

判断当前操作系统是否为64位操作系统,如果操作系统为64位则返回true;否则,false

【讨论】:

  • 但它没有回答这个问题。如果主应用程序需要其他仅 32 位的组件,即使在 64 位操作系统上,主应用程序也可以强制以 32 位模式加载。
  • 这是 .Net 4.0 的新功能;他正在使用 3.5。
  • 检查IntPtr.Size == 8;如果为真,则程序集为64位,如果值为4,则为32位。
【解决方案2】:

您可以通过IntPtr.Size 简单地检查IntPtr 的大小以查看您的进程正在运行:

  • 如果它是 8 个字节,那么您正在作为 x64 进程运行。
  • 如果它是 4 个字节,那么您正在作为 x86 进程运行..

在 .NET 中,您可以将项目属性中的 Platform Target 设置为 Any CPU,以在 x64 操作系统上以 x64 方式自动运行应用程序,在 x86 操作系统上使用相同的二进制文件以 x86 方式运行您的应用程序。


即使在 x64 操作系统上,您的应用程序也可以在 x86 中运行,因为启动它的进程可能在 WOW64 仿真上运行并启动您的进程。以下是在 x64 操作系统上run your x64 process as an x86 process 的其他一些方法。

【讨论】:

  • 虽然你的解释是错误的(它没有告诉你你所在的架构),但这会起作用。请注意,在构建 C# DLL 时更改 CPU 属性如果不匹配只会导致崩溃,它不会控制位数。如果需要其他仅 32 位的组件,即使在 64 位操作系统上,主应用程序也可以在 32 位模式下加载。
  • 将架构一词替换为“作为 x__ 进程”,并固定解释一下 wow64 仿真,谢谢。
【解决方案3】:

这篇 MSDN 博客文章是一个好的开始。 GetEnvironmentVariable("PROCESSOR_ARCHITECTURE").ToString() 也可以在Mono Paint 中查看GetPlatform 代码。

【讨论】:

  • 这告诉你底层平台是否支持 64 位,而不是你的程序是否在 64 位模式下运行。
  • 依赖环境变量是不省事的,PROCESSOR_ARCHITECTURE 可以改变或在未来的操作系统中与预期不同
【解决方案4】:

您可以检查IntPtr.Size4还是8

【讨论】:

  • 正确,但我不会因为你回答明显的欺骗而奖励你。
  • 只用:Environment.Is64BitProcess
猜你喜欢
  • 2011-03-29
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
相关资源
最近更新 更多