对于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;
}
}