用户访问web服务出错时若是能得到用户的系统配置信息,想必是极好的。
我们惯用的做法是在用户的机器上运行一些程序,得到用户的系统信息,而一般的web页面,根据http信息,往往只能得到客户的浏览器和简单的系统信息,得不到系统的详尽物理信息等。
现在我们尝试一种利用WMI得到系统信息的方法。
引用一段百度百科的介绍:
WMI,是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。
我们来看代码:
function GetInformation(){ var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); var service = locator.ConnectServer("."); var properties = service.ExecQuery("select * from Win32_Processor");//CPU 信息 var value = ""; var e = new Enumerator (properties); for (; !e.atEnd(); e.moveNext()) { var p = e.item (); value += p.Name ; } return value;}
成功的结果:
期间遇到些问题:
期间遇到过“invalid class”或“out of memory”的错误信息
参见这里
http://technet.microsoft.com/zh-cn/library/ff406382.aspx#E4H
x80041010 的错误消息意味着您尝试引用了不存在的 WMI 类。出现此错误的原因通常是:类名称的拼写错误。例如,您尝试连接的是名为 Win32_Services 的类(其末尾有一个 s),而实际的类名为 Win32_Service(其末尾没有 s)。引用了错误的命名空间。脚本编写者时常会连接到 rootcimv2 命名空间,然后尝试访问 StdRegProv 类。遗憾的是,StdRegProv 实际上位于 rootdefault 命名空间中。尝试访问的是特定操作系统不支持的类。例如,SystemRestore 类(位于 rootdefault 命名空间中)只在 Windows XP 上受支持。如果您尝试访问该类时它位于(比方说)运行 Windows 2000 的计算机上,则多半会收到“无效类”错误。 注意:尝试连接到不存在的类时,您收到的错误可能不是 0x80041010,而是错误 0x80041002(“无法找到对象”)或错误 0x80041006(“内存不足”)。
/desktop/aa394373(v=vs.85).aspx
延展:因为WMI重置前,一直无法正确得到系统信息,调查发现flash也能拿到类似的结果,或许可以解决linux和mac上的探测问题,可参考:
http://www.moock.org/asdg/technotes/echoVersion/