如何判断一个程序是 32bit 还是 64bit ?

咨询区

  • Jonathan Allen

我有一个 .NET 应用程序,我觉得它现在是 32bit,但又不确定构建服务器是否真的帮我编译成了 32bit,请问我有什么办法可以检测当前的程序是否是真的 32bit ?

回答区

  • Jaco Pretorius

你想判断运行的应用程序是 32bit 还是 64bit 的话,方法有很多。

  1. 任务管理器

打开 windows 任务管理器,查看该进程名后面是否有 *32 字样,如果由此字样那就说明是 32bit应用程序,反之为 64bit。

  1. Is64BitProcess属性

.NET 的 Environment 类提供了一个 Is64BitProcess 属性,你可以判断 true/false 来获取当前是否为 32bit/64bit 。

//
        // Summary:
        //     Gets a value that indicates whether the current process is a 64-bit process.
        //
        // Returns:
        //     true if the process is 64-bit; otherwise, false.
        public static bool Is64BitProcess
        {
            get { }
        }
  1. 使用 win32 api

Win32 API 中提供了一个 IsWow64Process 方法,可以借助它实现,参考如下代码:

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

接下来包装成一个可以判断 Process 的 IsProcess64() 方法。

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;
    }
}
  1. 使用 corflags.exe

corflags.exe 小工具可以配置和查询 应用程序 header 部分的 CorFlags 标记 从而知道你的程序是 32bit 还是 64bit。

具体参考MSDN连接:https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-2.0/ms164699(v=vs.80)?redirectedfrom=MSDN

  1. IntPtr.Size

可以在程序运行来之后,判断 IntPtr.Size 的值,如何 IntPtr.Size == 4 的话,很显然是 32bit,如何 IntPtr.Size == 8 说明当前是 64bit。

点评区

其实判断方法有很多,看应用程序的 PE 头是个好办法,或者通过工具查看下进程的内存地址的长度来判断32还是64bit。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值