如何确定.NET应用程序是32位还是64位?

我有一个.NET应用程序应该被编译为一个32位唯一的应用程序。 我怀疑我的构build服务器实际上并没有这样做。

如何确定.NET应用程序是否实际设置为以32位模式运行?

如果您尝试检查正在运行的应用程序是否以32位或64位模式运行,请打开任务pipe理器并检查它是否在进程名称旁边有一个星号(* 32)。

如果你有一个已编译的dll,并且想要检查它是否编译为32位或64位模式,请执行以下操作(从相关问题 )。 我会认为你希望你的dll被编译为AnyCPU

打开Visual Studio命令提示符并键入“corflags [your assembly]”。 你会得到这样的东西:

 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转换工具。 版本3.5.21022.8版权所有(c)Microsoft Corporation。 版权所有。

版本:v2.0.50727
 CLR标题:2.5
 PE:PE32
 CorFlags:24
 ILONLY:0
 32BIT:0
签名:1

你正在看PE和32BIT

AnyCpu:

PE:PE32 32BIT:0

86:

PE:PE32 32BIT:1

64位:

PE:PE32 + 32BIT:0

要在运行时执行此操作…

您可以评估IntPtr.Size。 如果IntPtr.Size == 4那么它是32位(4 x 8)。 如果IntPtr.Size == 8那么它是64位(8 x 8)

最快的方法可能是在64位机器上运行时,在任务pipe理器中名称后面会有一个星号(*)。 星号表示它正在syswow64中运行,如果标记为32位。

另一种方法是运行corflags.exe,这将显示你的答案。 这与.NET SDK。

那么,如果你使用的是.NET 4.0,那么就是System.Environment.Is64BitProcess

我使用下面的代码:

 [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool IsWow64Process( [In] IntPtr hProcess, [Out] out bool wow64Process ); 

附:

 public static bool IsProcess64(Process process) { if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) || Environment.OSVersion.Version.Major >= 6) { bool ret_val; try { if (!WindowsAPI.IsWow64Process(process.Handle,out ret_val)) ret_val = false; } catch { ret_val = false; } if (!ret_val && IntPtr.Size == 8) { return true; } else { return false; } } else { return false; } } 

你可以通过Process.CurrentProcess或类似的。

如果您想以编程方式testing程序集,则可以使用corflags.exe

 >corflags.exe <assembly> <listing of header information, among them the 32bit-ness>