方法一:
对于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; }
方法二:
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");
相关推荐
源码 , c#获取系统位数 使用前,首先选中解决方案中的 引用 –>添加引用 -> .net 活页下找到 System.Management;
在.net 4.5中,判断操作系统不用再写方法去判断了,有直接可以利用的属性了哦,如下所示:Environment.Is64BitProcess 属性.NET Framework 4.5 确定当前进程是否为 64 位进程。当然如果是用的.net 4.5以前的童鞋也...
支持项目生成时选择为AnyCPU(不受32位系统与64位系统的限制) 已完善为自动检测当前系统位数,本次程序运行只释放对应位数的SQLite.Interop.dll 在只装有.NET2.0的机器上就可以操作Sqlite数据库。 实测32(XP,2003...
支持项目生成时选择为AnyCPU(不受32位系统与64位系统的限制) 已完善为自动检测当前系统位数,本次程序运行只释放对应位数的SQLite.Interop.dll 在只装有.NET2.0的机器上就可以操作Sqlite数据库。 实测32(XP,2003...
支持项目生成时选择为AnyCPU(不受32位系统与64位系统的限制) 已完善为自动检测当前系统位数,本次程序运行只释放对应位数的SQLite.Interop.dll 在只装有.NET2.0的机器上就可以操作Sqlite数据库。 实测32(XP,2003...
支持项目生成时选择为AnyCPU(不受32位系统与64位系统的限制) 已完善为自动检测当前系统位数,本次程序运行只释放对应位数的SQLite.Interop.dll 在只装有.NET2.0的机器上就可以操作Sqlite数据库。 实测32(XP,2003...
支持项目生成时选择为AnyCPU(不受32位系统与64位系统的限制) 已完善为自动检测当前系统位数,本次程序运行只释放对应位数的SQLite.Interop.dll 在只装有.NET2.0的机器上就可以操作Sqlite数据库。 实测32(XP,2003...
(4)因为使用的是积分系统和销售系统分离的设计,此时需要到会员积分管理中,做一次“积分处理”的操作。系统根据会员卡号和消费金额,自动为会员计算积分并累积。 (5)到了节假日,可进行积分反馈活动。前提是要...
本系统由用C#语言进行编写和实现,可实现多用户登录。各模块简介如下: 1 文件部分分为C盘和D盘两个磁盘块,在每个磁盘块中均可进行新建、删除、编辑、格式化、显示 属性及个文件等操作。如可新建文件夹、文本...
我看评论说运行不了,可能是因为没装Matlab或者Matlab版本和操作系统位数和我编译的dll不匹配,因此我把Matlab原函数文件补充,可自行在Matlab下运用deploytool命令进行重新编译,然后在C#程序中重新引用。...
每个数据表都有“LoginID”为主键约束,防止其他字段重复导致的冲突。其中学生成绩的总分依赖与其他成绩,为其他...因为电话号码为11 位数,该字段数据类型定义为nvarchar(50),其他每个字段的定义类型都为nchar(10)。
115 <br>0192 如何获取“我的文档”系统文件夹路径 115 <br>0193 如何获取应用程序当前执行的路径 116 <br>0194 如何获取当前操作系统的信息 116 <br>0195 如何实现基本数据类型随意转换 116...
实例050 设置货币值中使用的小数位数 64 实例051 格式化输入数据为货币格式 65 实例052 开发一个进制转换器 66 3.4 日期时间格式的数据处理 67 实例053 动态获得系统当前日期和时间 67 实例054 手动设置系统日期时间...
操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习...