对于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.dll):
using System.Managment; /// <summary> /// 检查系统是32位还是64位 /// </summary> /// <returns>0运行出错;32表示32位系统;64表示64位操作系统</returns> public static int Distinguish64or32System() { try { //得到AddressWidth值 ConnectionOptions mConnOption = new ConnectionOptions(); ManagementScope mMs = new ManagementScope("\\localhost", mConnOption); ObjectQuery mQuery = new ObjectQuery("select AddressWidth from Win32_Processor"); ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(mMs, mQuery); ManagementObjectCollection mObjectCollection = mSearcher.Get(); string retVal = string.Empty; foreach (ManagementObject mObject in mObjectCollection) { retVal = mObject["AddressWidth"].ToString(); } //根据值判断,不能直接返回得到的值, //32位返回"32",64位会因为CPU而有两个值,"N/A"或"64" if (retVal == "32") { return 32; } else { return 64; } } catch { return 0; } }