How do I tell if my application (compiled in Visual Studio 2008 as Any CPU) is running as a 32-bit or 64-bit application?
5 Answers
If you're using .NET 4.0, it's a one-liner for the current process:
Environment.Is64BitProcess
Reference: Environment.Is64BitProcess Property (MSDN)

- 30,738
- 21
- 105
- 131

- 3,181
- 3
- 17
- 3
-
4Thanks for posting the answer, that's great to know. I'm not going to change the current accepted answer because this question was originally about .NET 3.5 but I would encourage people to up vote your answer as well. – Redwood Aug 11 '10 at 20:26
if (IntPtr.Size == 8)
{
// 64 bit machine
}
else if (IntPtr.Size == 4)
{
// 32 bit machine
}

- 30,738
- 21
- 105
- 131

- 2,610
- 24
- 32
-
-
1Just for those who are on .NET 4+ - there is a better answer now bellow about Environment.Is64BitProcess – Sevenate Jan 15 '20 at 18:01
I found this code from Martijn Boven that does the trick:
public static bool Is64BitMode() {
return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}

- 66,744
- 41
- 126
- 187
-
25It's likely more efficient to call IntPtr.Size instead of Marshal.SizeOf(typeof(IntPtr)) – JaredPar Nov 05 '08 at 19:20
This code sample from Microsoft All-In-One Code Framework can answer your question:
Detect the process running platform in C# (CSPlatformDetector)
The CSPlatformDetector code sample demonstrates the following tasks related to platform detection:
- Detect the name of the current operating system. (e.g. "Microsoft Windows 7 Enterprise")
- Detect the version of the current operating system. (e.g. "Microsoft Windows NT 6.1.7600.0")
- Determine whether the current operating system is a 64-bit operating system.
- Determine whether the current process is a 64-bit process.
- Determine whether an arbitrary process running on the system is 64-bit.
If you just want to determine whether the currently running process is a 64-bit process, you can use the Environment.Is64BitProcess property that is new in .NET Framework 4.
And if you want to detect whether an arbitrary application running on the system
is a 64-bit process, you need to determine the OS bitness, and if it is 64-bit,
call IsWow64Process()
with the target process handle:
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;
}
In .Net Standard you can use System.Runtime.InteropServices.RuntimeInformation.OSArchitecture

- 11,349
- 20
- 53
- 64
-
Also in .NET Framework since .NET Framework 4.7.1 (from 2017). – Jeppe Stig Nielsen Nov 22 '22 at 11:53