[转]C#如何判断操作系统位数是32位还是64位
方法一:
对于C#来说,调用WMI是一种简单易行的方式。我们可以用Win32_Processor类里面的AddressWidth属性来表示系统的位宽。AddressWidth的值受CPU和操作系统的双重影响。
具体的值如下面的表格所示:
| 32bit OS | 64bit OS | |
| 32bit CPU | AddressWidth = 32 | N/A |
| 64bit CPU | AddressWidth = 32 | AddressWidth = 64 |
可以用下面的C#代码得到AddressWidth的值
(注意需添加引用System.Management)

public static string Detect3264()
{
ConnectionOptions oConn = new ConnectionOptions();
System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\\\localhost", oConn);
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select AddressWidth from Win32_Processor");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);
ManagementObjectCollection oReturnCollection = oSearcher.Get();
string addressWidth = null; foreach (ManagementObject oReturn in oReturnCollection)
{
addressWidth = oReturn["AddressWidth"].ToString();
} return addressWidth;
}

方法二:(需Framework4.0+)
bool type;
type = Environment.Is64BitOperatingSystem;
Console.WriteLine(type);
如返回值为True则表示是64位,如返回值为False则表示为32位。
方法三:
这个方法也是最直接的方法,但是有条件限制,例用IntPtr结构的size属性来查看系统的位宽
命名空间是System;
前题是程序需要采用any/CPU的方式进行编辑;
正常情况下int的位宽是4位,即是32位操作系统。

if (IntPtr.Size == 8)
{
//64 bit
}
else if (IntPtr.Size == 4)
{
//32 bit
}
else
{
//...NotSupport
}

方法四:
64位Wnidows 里面有个叫Wow64 的模拟器技术,可以使32位的程序在64位Windows 上运行。 当你想在程序里面针对32b位/ 64位系统执行不同代码的时候, 需要判断操作系统是32位还是64位。 使用 Windows API函数 GetNativeSystemInfo 可以获得这个信息。

SYSTEM_INFO si;
GetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture != PROCESSOR_ARCHITECTURE_IA64 )
{
//64 位操作系统
}
else
{
// 32 位操作系统
}

另外,Windows API 还提供了 IsWow64Process 函数判断程序是不是运行在Wow64模拟器之上。
BOOL bIsWow64 = FALSE;
IsWow64Process(GetCurrentProcess(), &bIsWow64);
需要注意是GetNativeSystemInfo 函数从Windows XP 开始才有, 而 IsWow64Process 函数从 Windows XP with SP2 以及 Windows Server 2003 with SP1 开始才有。 所以使用该函数的时候最好用GetProcAddress。

typedef void (WINAPI *LPFN_PGNSI)(LPSYSTEM_INFO); typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_PGNSI pGNSI = (LPFN_PGNSI ) GetProcAddress(
GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),"IsWow64Process");

摘自:http://www.cnblogs.com/czzju/articles/2482474.html
[转]C#如何判断操作系统位数是32位还是64位的更多相关文章
- C#如何判断操作系统位数是32位还是64位
方法一: 对于C#来说,调用WMI是一种简单易行的方式.我们可以用Win32_Processor类里面的AddressWidth属性来表示系统的位宽.AddressWidth的值受CPU和操作系统的双 ...
- C#判断操作系统是32位还是64位(超简单)
由于项目需要在64位和32位系统运行,需要判断当前系统是32位还是64位. 网上很多方法,但是都感觉不是很简洁,最后发现可以使用int的长度来判断:看代码 /// <summary> ...
- 如何判断Office是32位还是64位?
对于持续学习VBA的老铁们,有必要了解Office的位数. 如果系统是32位的,则不需要判断Office位数了,因为只能安装32位Office. 下面只讨论64位系统中,Office的位数判断问题. ...
- VS2010编写32位和64位dll环境配置,以及判断dll是多少位
前言 最近在编写dll注入程序的时候,因为想注入到系统进程,结果发现总是注入失败.自闭了好长一会发现我忘记了我的系统是64位的,系统进程也是64位的,而我编写的待注入的DLL是32位了,所以才导致失败 ...
- Shell脚本中,如何判断Linux系统是32位还是64位?
一行就能搞定,输出32或者64 可以用“和. 参考代码如下: ldconfig if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LON ...
- VC++ 判断当前系统为32位还是64位
尝试了在VC++环境下判断系统为32位还是64位的方法,亲测有效!提供的函数如下 BOOL IsWow64() { typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) ...
- 32位和64位dll判断
如何判断一个dll文件是32位还是64位? 1. 开发中经常会使用到VC的一个工具 Dependency Walker用depends.exe打开dll,文件名前有64标示的即为64位. 但是这个方式 ...
- JAVA判断32位还是64位,调用不同的DLL(转)
源:JAVA判断32位还是64位,调用不同的DLL 通过获取sun.arch.data.model可判断是32还是64的JAVA 将32或者64位的DLL放不同的目录,实现自适应调用DLL Prope ...
- 怎么查看mac系统是32位还是64位的操作系统
如何查看mac系统是32位还是64位的操作系统 (一)点击工具栏左上角点击 (苹果Logo)标志,关于本机 --> 更多信息 --> 系统报告 -->(左侧栏中)软件 (二) ...
随机推荐
- 周赛 POJ 3934 Queue
Description Linda is a teacher in ACM kindergarten. She is in charge of n kids. Because the dinning ...
- 优化png图片的历程
一.使用yslow一个tool 找到一个叫做smush的工具,点击就可以进入工具的页面. 然后你就能够压缩,下载压缩后的图片. 可是终于我还是没有选择这个方案.由于压缩的图片大小还是太大了,我认为还 ...
- Android程序调试
1. 使用Log.d方法输出Debug日志信息. Log.d方法用来输出DEBUG故障日志信息,该方法有两种重载形式,其中开发人员经常用到的重载形式语法如下: public static int d( ...
- 网络驱动移植之解析Linux网络驱动的基本框架
内核源码:linux-2.6.38.8.tar.bz2 概括而言,编写Linux网络驱动其实只要完成两件事即可,一是分配并初始化网络设备,二是注册网络设备. 1.分配并初始化网络设备 动态分配网络设备 ...
- authpuppy 认证服务器搭建
此文仅限于搭建authpuppy认证服务器,不包含认证插件等安装,仅说明步骤以备下次安装忘记步骤.耽误时间. 环境:ubuntu10.04 软件版本:authpuppy-1.0.0-stable.tg ...
- linux下停止tomcat
bin/shutdown.sh -force 强行停掉tomcat 重启tomcat的脚本: /home/tomcat/bin/shutdown.sh -force/home/tomcat/bin/s ...
- 算法笔记_149:图论之桥的应用(Java)
目录 1 问题描述 2 解决方案 1 问题描述 1310 One-way traffic In a certain town there are n intersections connected ...
- vue2.x 总结
1.独立构建vs运行时构建 在按照vue1.0的配置配置好webpack后,会出现Failed to mount component: template or render function not ...
- UML回想-通信图
我们对软件project这一大块的学习事实上開始的还是挺早的,而且在后来的学习过程中也不断的涉及到了这些知识. 可是,经过软考的检验来看我对软工这一块的内容掌握的实在是慘不忍睹.基本上就是一出 ...
- javascript 新知识
document.compatMode 属性 BackCompat: Standards-compliant mode is not switched on. (Quirks Mode) 标准模式 ...