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

时间:2010-08-14 13:52:14

标签: c# .net 64-bit

在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;
   }
}

提前致谢。

5 个答案:

答案 0 :(得分:8)

在.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);
    }
}

使用反射器或类似工具来确切了解其工作原理。

答案 1 :(得分:2)

bool x86 = IntPtr.Size == 4;

答案 2 :(得分:1)

如果您针对AnyCPU构建,并且您在64位系统上运行,它将在64位版本的框架上运行。在32位系统上,它将在32位版本的框架上运行。只需检查IntPtr.Size属性即可使用此功能。如果Size = 4,您运行的是32位,Size = 8,那么您运行的是64位。

答案 3 :(得分:0)

看看这个:

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

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

答案 4 :(得分:0)

以下内容来自this answer,所以不要赞成我:)

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