Windows Management Instrumentation(WMI) 获取计算机硬件信息
最近写了一个系统验证的程序,结果发现获取计算机硬件信息时B/S和C/S结构获取的CPU和硬盘编号时,个别的机器得到结果不一样。。
开发环境:VS.net2008 .net Framework3.5sp1
测试环境:Windows XP SP3 Windows Server2003 SP3
代码如下:
internal class HardwareInfo
{
public HardwareInfo()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 获取第一个CPU编号
/// </summary>
/// <returns>CPU编号</returns>
public static string GetCpuId()
{
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
String strCpuID = "XXXXXXXXXXXXXX"; //设置了一个默认值,如果取不到用默认的
try
{
foreach (ManagementObject mo in moc)
{
strCpuID = mo.Properties["ProcessorId"].Value.ToString();
break;
}
}
catch
{ }
return strCpuID;
}
/// <summary>
/// 功能:获取硬盘ID
/// </summary>
/// <returns>硬盘ID</returns>
public static string GetMainHardDiskId()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
String strHardDiskID = "XXXXXXXXXXXXXX"; //设置了一个默认值,如果取不到用默认的
try
{
foreach (ManagementObject mo in searcher.Get())
{
strHardDiskID = mo["SerialNumber"].ToString().Trim();
break;
}
}
catch
{ }
return strHardDiskID;
}
我的思路是这样的,,用B/S的小工具获取到硬件信息生成一个机器编码,然后用通过另一个工具生成一个注册文件,然后在B/S用同样的方法得到机器编码,再用同样的算法验证注册是否合法,,结果发现个别的机器B/S和C/S结构获取的CPU和硬盘编号不一致,,导致无法验证,,我想问问为什么什么会出现不一致的情况,,是哪些原因导致的??
我自己分析原因大概应该有两种:
第一种是权限的问题,asp.net使用WMI权限不够导致无法获取编号,,而使用了,默认编号;
第二种是操作系统的环境的问题,操作系统中安装的补丁大多不同,,可能会有对这方面修改,对这个问题,,我在微软的MSDN上找到了一点解释,不过没有什么实质的突破。
链接:http://msdn.microsoft.com/en-us/library/aa394373(v=VS.85).aspx
Windows versions NumberOfLogicalProcessors and NumberOfCores property can use.
NumberOfLogicalProcessors and NumberOfCores property can not use in Windows XP Service Pack 2 and earlier.
In Windows XP Service Pack 3, NumberOfLogicalProcessors and NumberOfCores property is available.
In Windows Server 2003 Service Pack 2 and earlier, NumberOfLogicalProcessors and NumberOfCores property is not available. But applied KB932370 hotfix, NumberOfLogicalProcessors and NumberOfCores property is available.See
The number of physical hyperthreading-enabled processors or the number of physical multicore processors is incorrectly reported in Windows Server 2003
http://support.microsoft.com/kb/932370/
In Windows Vista, NumberOfLogicalProcessors and NumberOfCores property is available.
看了这个提示我对比了一下测试环境,并没有发现特别之处,有没有朋友遇到这样的状况,帮忙解释一下。先谢了。。
QQ:47307116