How to detect Windows 64-bit platform with .NET? How to detect Windows 64-bit platform with .NET? windows windows

How to detect Windows 64-bit platform with .NET?


.NET 4 has two new properties in the Environment class, Is64BitProcess and Is64BitOperatingSystem. Interestingly, if you use Reflector you can see they are implemented differently in the 32-bit & 64-bit versions of mscorlib. The 32-bit version returns false for Is64BitProcess and calls IsWow64Process via P/Invoke for Is64BitOperatingSystem. The 64-bit version just returns true for both.


UPDATE: As Joel Coehoorn and others suggest, starting at .NET Framework 4.0, you can just check Environment.Is64BitOperatingSystem.


IntPtr.Size won't return the correct value if running in 32-bit .NET Framework 2.0 on 64-bit Windows (it would return 32-bit).

As Microsoft's Raymond Chen describes, you have to first check if running in a 64-bit process (I think in .NET you can do so by checking IntPtr.Size), and if you are running in a 32-bit process, you still have to call the Win API function IsWow64Process. If this returns true, you are running in a 32-bit process on 64-bit Windows.

Microsoft's Raymond Chen:How to detect programmatically whether you are running on 64-bit Windows

My solution:

static bool is64BitProcess = (IntPtr.Size == 8);static bool is64BitOperatingSystem = is64BitProcess || InternalCheckIsWow64();[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)][return: MarshalAs(UnmanagedType.Bool)]private static extern bool IsWow64Process(    [In] IntPtr hProcess,    [Out] out bool wow64Process);public static bool InternalCheckIsWow64(){    if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) ||        Environment.OSVersion.Version.Major >= 6)    {        using (Process p = Process.GetCurrentProcess())        {            bool retVal;            if (!IsWow64Process(p.Handle, out retVal))            {                return false;            }            return retVal;        }    }    else    {        return false;    }}