如何确定.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>