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

时间:2010-09-23 20:12:10

标签: .net

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

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

7 个答案:

答案 0 :(得分:45)

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

如果您有已编译的dll ,并且想要检查它是否已针对32位或64位模式进行编译,请执行以下操作(从related question开始)。 我认为你希望你能为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 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

你正在特别关注 PE和32BIT

AnyCpu:

PE:PE32 32位:0

86:

PE:PE32 32位:1

64:

PE:PE32 + 32位:0

答案 1 :(得分:19)

要在运行时执行此操作...

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

答案 2 :(得分:8)

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

答案 3 :(得分:7)

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

另一种方法是对它运行corflags.exe,这将显示你所追求的答案。这附带.NET SDK。

答案 4 :(得分:4)

我使用以下代码:

[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或类似的内容。

答案 5 :(得分:2)

如果要以编程方式非测试程序集,可以使用corflags.exe

>corflags.exe <assembly>

<listing of header information, among them the 32bit-ness>

答案 6 :(得分:1)

我正在搜索相同的信息,我发现自Windows 8.1以来,没有更多的星号。

您有一个名为&#34;平台&#34;的任务管理器详细信息列。它的内容是&#34; 32位&#34;或&#34; 64位&#34;。