.NET中检测当前程序为32位/64位以及调整
分类于 专业技术, 开发语言, 教程, 有图有真相, 桌面应用
熟悉.NET开发的人都知道,在使用Visual Studio创建项目的时候,默认使用的编译配置选项为Any CPU,这意味着程序在32位机器上将使用32位进程;而在64位机器上将会自动运行在64位进程中。这也是.NET的强大之处,以最简单的方式同时支持32位以及64位系统,并且充分利用64位系统的优势。
那么,我们如何在代码中判断当前的程序正运行在32位还是64位进程中呢?最简单的方法就是通过:
1 2 3 4 |
public static bool Is64bProcess() { return IntPtr.Size == 8; } |
需要注意的是,上面提供的只是判断进程是否为32位或者64位,而不是当前系统是32位或64位。32位的程序是可以运行在64位的系统中的。
如果您已经编译好了程序为AnyCPU,希望在不重新编译的前提下修改程序的目标平台,可以通过corflags.exe工具来实现。
corflags用于查看程序的PE头信息,如下面的截图所示:
将一个目标平台为AnyCPU的程序改为目标平台是x86,则可以通过下面的方法:
1 |
conflags.exe WindowsApplication3.exe /32BITREG+ |
下面几个链接也许有所帮助:
- http://blogs.msdn.com/b/joshwil/archive/2005/04/08/406567.aspx
- http://msdn.microsoft.com/en-us/library/ms973190.aspx
— 本文结束
Apr24
April 26, 2014 at 12:20 am
这种方法只能是判断当前程序是多少位的吧,一旦编译成EXE后这个 IntPtr.Size 就确定了?也就是说如果32位程序在 64 位机器上跑返回的还是 32 位。。。顺便把我的 HelloACM 和 CodingForSpeed 也加上外链吧。。:)
April 26, 2014 at 4:42 am
.NET程序不一定在编译之后就确定,如果编译的目标平台为AnyCPU,则在32位上返回4,64位上返回8。