• 如何判断一个程序是 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 。

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

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

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

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

    1. public static bool IsProcess64(Process process)
    2. {
    3.     if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) || Environment.OSVersion.Version.Major >= 6) {
    4.         bool ret_val;
    5.         try {
    6.             if (!WindowsAPI.IsWow64Process(process.Handle,out ret_val)) ret_val = false;
    7.         } catch {
    8.             ret_val = false;
    9.         }
    10.         if (!ret_val && IntPtr.Size == 8) {
    11.             return true;
    12.         } else {
    13.             return false;
    14.         }
    15.     } else {
    16.         return false;
    17.     }
    18. }
    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。

  • 相关阅读:
    3.1 模板测试与深度测试(Stencil Test & Z Test)
    虹科 | 解决方案 | 经销商(OEM)方案
    如何免费将pdf转word?看完这篇你就会了
    【Pytorch with fastai】第 5 章 :图像分类
    PostgreSQL的学习心得和知识总结(一百四十八)|查看 PostgreSQL 17 中的新内置排序规则提供程序
    Swagger配置
    Arthas之类操作
    【计算机网络】HTTP协议
    非零基础自学Java (老师:韩顺平) 第2章 Java概述 2.18 Java代码规范 && 2.19 DOS命令
    java计算机毕业设计基于安卓Android的跨校区班车乘车预约系统APP
  • 原文地址:https://blog.csdn.net/biyusr/article/details/125515075