How do I determine if a .NET application is 32 or 64 bit?
I have a .NET application that was supposed to be compiled as a 32-bit only application. I suspect my build server isn't actually doing it.
How do I determine if a .NET application is actually set to run in 32-bit mode?
If you're trying to check whether or not a running application is running in 32-bit or 64-bit mode, open task manager and check whether or not it has an asterisk (*32) next to the name of the process.
EDIT (imported from answer by manna): As of Win8.1, the "bittyness" of a process is listed in a separate detail column labelled Platform
. (Right click on any column header to expose the select columns menu.)
If you have a compiled dll and you want to check if it's compiled for 32-bit or 64-bit mode, do the following (from a related question). I would think that you want you dll to be compiled for AnyCPU.
Open Visual Studio Command Prompt and type "corflags [your assembly]". You'll get something like this:
c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>corflags "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 3.5.21022.8 Copyright (c) Microsoft Corporation. All rights reserved. Version : v2.0.50727 CLR Header: 2.5 PE : PE32 CorFlags : 24 ILONLY : 0 32BIT : 0 Signed : 1
You're looking at PE and 32BIT specifically.
AnyCpu:
PE: PE32 32BIT: 0
x86:
PE: PE32 32BIT: 1
x64:
PE: PE32+ 32BIT: 0
To do this at runtime...
You can evaluate IntPtr.Size
. If IntPtr.Size == 4
then it's 32 bit (4 x 8). If IntPtr.Size == 8
then it's 64 bit (8 x 8)
Well, if you're using .NET 4.0, there's System.Environment.Is64BitProcess
.