【问题标题】:In C#, how can I know programmatically if the Operating system is x64 or x86在 C# 中,我如何以编程方式知道操作系统是 x64 还是 x86
【发布时间】:2011-03-29 20:31:57
【问题描述】:

在 C# 中,我如何以编程方式知道操作系统是 x64 还是 x86

我在网上找到了这个API方法,但是不行

[DllImport("kernel32.dll")]
public static extern bool IsWow64Process(System.IntPtr hProcess, out bool lpSystemInfo);

public static bool IsWow64Process1
{
   get
   {
       bool retVal = false;
       IsWow64Process(System.Diagnostics.Process.GetCurrentProcess().Handle, out retVal);
       return retVal;
   }
}

提前致谢。

【问题讨论】:

  • 它返回的错误是什么?你能发布 IsWow64Process API 的返回值吗?另外,您的 .NET DLL 是否编译为 AnyCPU?
  • 另外,尝试搜索 - bing 会返回 stackoverflow.com/questions/336633/… 作为结果。
  • @obelix: 没有错误,但我的操作系统版本是 64,它返回 false
  • Homam,如果您为 AnyCPU 编译,那么您的进程很可能是本机 64 位进程,而不是在 WoW64 下。在 64 位操作系统上,该函数很可能是错误的。您只检查了您的流程是否正在被模拟——它可能是本机的。

标签: c# .net 64-bit


【解决方案1】:

在 .NET 4.0 中,您可以使用新的 Environment.Is64BitOperatingSystem 属性。

这就是它的实施方式

public static bool Is64BitOperatingSystem
{
    [SecuritySafeCritical]
    get
    {
        bool flag;
        return ((Win32Native.DoesWin32MethodExist("kernel32.dll", "IsWow64Process") && Win32Native.IsWow64Process(Win32Native.GetCurrentProcess(), out flag)) && flag);
    }
}

使用反射器或类似的东西来看看它是如何工作的。

【讨论】:

  • 是的,他们把事情搞砸了。
【解决方案2】:

bool x86 = IntPtr.Size == 4;

【讨论】:

  • 这将显示您是在 32 位上运行还是您是在 64 位的 WOW64 下运行。它不会为您提供实际的平台,但会告诉您当前的运行时环境。
【解决方案3】:

如果您针对 AnyCPU 构建,并且在 64 位系统上运行,它将在 64 位版本的框架上运行。在 32 位系统上,它将在 32 位版本的框架上运行。您可以通过简单地检查IntPtr.Size 属性来利用它的优势。如果Size = 4,你运行在 32 位,Size = 8,你运行在 64 位。

【讨论】:

【解决方案4】:

看看这个:

http://msdn.microsoft.com/en-us/library/system.environment_members.aspx

我认为您正在寻找 System.Environment.OSVersion

【讨论】:

  • 这似乎无法回答是 32 位还是 64 位的问题。
  • Environment.Is64BitProcess 属性仅在 .Net 4.0 中受支持,我使用的是 3.5
【解决方案5】:

以下来自this answer,所以请不要为我点赞:)

if (8 == IntPtr.Size
    || (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
{
    // x64
}
else
{
    // x86
}

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 2012-03-17
    • 2011-01-08
    • 1970-01-01
    • 2012-08-29
    • 2014-10-05
    • 2013-02-28
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多