.NET中检测当前程序为32位/64位以及调整

熟悉.NET开发的人都知道,在使用Visual Studio创建项目的时候,默认使用的编译配置选项为Any CPU,这意味着程序在32位机器上将使用32位进程;而在64位机器上将会自动运行在64位进程中。这也是.NET的强大之处,以最简单的方式同时支持32位以及64位系统,并且充分利用64位系统的优势。

那么,我们如何在代码中判断当前的程序正运行在32位还是64位进程中呢?最简单的方法就是通过:

需要注意的是,上面提供的只是判断进程是否为32位或者64位,而不是当前系统是32位或64位。32位的程序是可以运行在64位的系统中的。

如果您已经编译好了程序为AnyCPU,希望在不重新编译的前提下修改程序的目标平台,可以通过corflags.exe工具来实现。

corflags用于查看程序的PE头信息,如下面的截图所示:

corflags.exe示例

corflags.exe示例

将一个目标平台为AnyCPU的程序改为目标平台是x86,则可以通过下面的方法:

下面几个链接也许有所帮助:

— 本文结束



Apr24

  1. 这种方法只能是判断当前程序是多少位的吧,一旦编译成EXE后这个 IntPtr.Size 就确定了?也就是说如果32位程序在 64 位机器上跑返回的还是 32 位。。。顺便把我的 HelloACM 和 CodingForSpeed 也加上外链吧。。:)

    • .NET程序不一定在编译之后就确定,如果编译的目标平台为AnyCPU,则在32位上返回4,64位上返回8。