Windows Management Instrumentation(WMI) 获取计算机硬件信息

liuchengit 2011-01-12 11:10:20
最近写了一个系统验证的程序,结果发现获取计算机硬件信息时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
...全文
391 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TearyWang 2011-05-11
  • 打赏
  • 举报
回复
建议你直接和驱动打交道。在Windows下,对着驱动编程,其实不是件太难的事情,但你一定得舍得在这上面花点功夫。
TearyWang 2011-05-11
  • 打赏
  • 举报
回复
不久前我使用VC也遇到了同样的问题。好在你在B/S,我在同一台机器上,使用了Server 2003,XP,Vista,Win7系统做过测试,取到的数据均略有不同,最不靠谱的就是硬盘编号。最靠谱的就是MAC地址。但是如果使用WMI取MAC地址的话,稍微做点工作,就是骗过WMI,使得用WMI获取两台不同机器的MAC地址时,得到的结果相同。很是郁闷~
龍过鸡年 2011-01-18
  • 打赏
  • 举报
回复
你看看不能获取的机器 Windows Management Instrumentation 服务器有没有启动
liuchengit 2011-01-14
  • 打赏
  • 举报
回复
有空的帮帮忙了。。
wuyq11 2011-01-12
  • 打赏
  • 举报
回复
根据机器不同
还有就是权限问题,配置应用程序池的标识为本地系统看看
whowhen21 2011-01-12
  • 打赏
  • 举报
回复
WMI获取系统硬件信息
*************************************************
本内容使用CSDN小秘书回复
每天回帖即可得10分可用分!
*************************************************
liuchengit 2011-01-12
  • 打赏
  • 举报
回复
人生如梦,,多谢你的帮忙,,我是想说同一台机器上B/S和C/S的程序获得的硬件编码也不同,,只有个别的机器是这样的结果。。
配置应用程序池问题,,XP的系统并没有这部分内容。。
帮我看看还能从哪些地方入手。再次感谢!

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧