WMI 使用教程_.NET 入门教程

转载 2013年01月06日 11:23:55
 WMI 使用教程_.NET 入门教程 


先介绍一下WMI 相关知识: 
什么是WMI 呢? Windows 管理规范 (Windows Management Instrumentation ),它的主要功 
能包括:访问本地主机的一些信息和服务,可以远程管理计算机(当然你必须拥有足够的权限) 
也就是说可以象重起,关机,关闭进程,创建进程等等! 


有了初步了解下面我门开始一些初步的工作吧: 
在这个WMI 程序中,我将实现四个基本功能: 
1.Explorer 类似与windows 里的资源管理器 
2.SystemInfo 查看你的硬件信息和OS 信息 
3.Services 当前正在工作的信息 
4.Processes 当前执行的进程 
(这里是可以管理远程和本地OS 的) 


好了,我们要开始实现访问我们的OS 了,不过在这之前我们必须要引入System.Management 
这个命名空间 


下面让我们了解一下控件的状态事件 


我们必须保证是实时的所以必须在这里包涵UpdateStatus(string e)该事件(这是一个自定 
义的) 
这里主要是希望在点击每个控件时刷新状态栏,可以让用户知道程序在做什么! 


代码事例: 
//控件代码 
//状态事件的代理 
public delegate void Status(string e); 
public event Status UpdateStatus; 
//这里更新状态栏 
UpdateStatus("Hello world."); 


//这里是在主程序里的代码 
//写具体的事件代码 
private void refreshStatusBar(string stringStatus) 

//update status bar 
statusBarStatus.Text = stringStatus; 



下面是具体代码: 


Explorer Control 

这里首先介绍一下WMI的 Win32_LogicalDisk类(参考Platform SDK: Windows Management 
Instrumentation),通过它我们可以查看到本地驱动器 
的一些详细情况,我们还需要用到System.Management中的两个类
ManagementObjectSearcher 
和ManagementOjbectCollection它们的作用主要是ManagementObjectSearcher将查询到了 
ManagementOjbectCollection该对象的集合中去(这里可以获取的驱动器信息包括 驱动器
的名称 
,类型,描述信息等)当然你也可以只查看驱动器的部分信息可以在
ManagementObjectSearcher类 
的构造函数中这样写ManagementObjectSearcher query = new 
ManagementObjectSearcher("SELECT * From Win32_LogicalDisk "); (参考Platform SDK: 
Windows Management Instrumentation) 
代码如下: 
//get drive collection   
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From 
Win32_LogicalDisk ");   
ManagementObjectCollection queryCollection = query.Get(); 
//loop throught each object to get drive information 
foreach ( ManagementObject mo in queryCollection)   
{   
switch (int.Parse( mo["DriveType"].ToString()))   
{   
case Removable: //removable drives   
imageIndex = 5;   
selectIndex = 5;   
break;   
case LocalDisk: //Local drives   
imageIndex = 6;   
selectIndex = 6;   
break;   
case CD: //CD rom drives   
imageIndex = 7;   
selectIndex = 7;   
break;   
case Network: //Network drives   
imageIndex = 8;   
selectIndex = 8;   
break;   
default: //defalut to folder   
imageIndex = 2;   
selectIndex = 3;   
break;   
}

//get drive name 
Console.WriteLine("Drive: " + mo["Name"].ToString());   

SystemInfo Control 
该控件主要用来查看本地或远程主机的OS和硬件信息,这里需要用到另外两个 
对象ConnectionOptions和ManagementScope,ConnectionOptions主要是设置 
WMI连接信息的,如用户名和密码,这里我们主要用到它的两个属性UserName和 
Password; ManagementScope对象表示WMI的规范,通过该规范可以访问服务器 
和命名空间的路径已及使用ConnectionOptions中的设置 
请看如下代码: 
//Connect to the remote computer 
ConnectionOptions co = new ConnectionOptions(); 
co.Username = textUserID.Text; 
co.Password = textPassword.Text; 
//Point to machine 
System.Management.ManagementScope ms = new 
System.Management.ManagementScope("\\\\" +   
stringHostName + "\\root\\cimv2", co); 
现在我们结合刚才的知识来得到我们要的信息,但我们要得到那些我们想要信息呢? 
那样的话我们就必须要用到ObjectQuery对象,通过它我们可以得到我们想要的查询 
信息.把ObjectQuery对象和ManagementScope对象放入ManagementObjectSearcher对象 
中这样就可以通过我们设置好的规范和我们设置好的查询得到我们想要的结果,当然 
还必须要掉用ManagementObjiectSearcher的Get()方法,它会返回一个ManagementObject 
对象的集合,然后可以通过结合操作来访问到每一个我们要的信息. 
代码如下: 
//Query system for Operating System information 
oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
query = new ManagementObjectSearcher(ms,oq); 
queryCollection = query.Get(); 
foreach ( ManagementObject mo in queryCollection) 

//create child node for operating system 
createChildNode(nodeCollection, "Operating System: " + mo["Caption"]); 
createChildNode(nodeCollection, "Version: " + mo["Version"]); 
createChildNode(nodeCollection, "Manufacturer : " + mo["Manufacturer"]); 
createChildNode(nodeCollection, "Computer Name : " +mo["csname"]);

createChildNode(nodeCollection, "Windows Directory : " + mo["WindowsDirectory"]); 

 
要是你只是希望查看到本地主机的信息,你就没必要去创建 ConnectionOption, 
ManagementScope,ObjectQuery 对象,你仅仅只需要把ManagementObjectSearcher 
对象的结果在ManagementObjectCollection集合里去调用Get()方法既可. 
代码如下: 
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From 
Win32_OperatingSystem"); 
ManagementObjectCollection queryCollection = query.Get(); 
这里只是介绍了OS信息的方法,其它的如Bios,Memory.Network Connection等信息的查看 
只需要把查询字改改就可以了!(可参考Platform SDK: Windows Management 
Instrumentation) 
Service Control控件介绍: 
该控件要用到一个新的查询字"SELECT * FROM Win


点击查看更多:http://wenku.it168.com/d_000687766.shtml 

AutoIt教程资源汇总

alimama_pid="mm_10809884_1047205_2744758"; alimama_titlecolor="0000FF"; alimama_descolor ="000000";...
  • Xviewee
  • Xviewee
  • 2008年06月11日 16:04
  • 9798

ASP.NET入门教程(经典)

中国ASP.NET开发网整理,转载请注明出处。1 ASP.NET简介1.1 什么是ASP.netASP.net 是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。A...
  • Snowdust
  • Snowdust
  • 2008年03月22日 12:05
  • 20310

labview入门系列教程

一个不错的初学者入门视频http://player.youku.com/player.php/sid/XNDEyNDIxNDA=/v.swf
  • tianhen791
  • tianhen791
  • 2010年12月09日 21:15
  • 1307

WMI Tools工具介绍

1. 环境设置windowsXp以上系统自带wmi,对于一些比较老的系统需要安装wmi的程序包,可以在微软网站上下载相关程序包和WmiTools这个工具。2. WMI Tools工具介绍安装完成后,执...
  • tjvictor
  • tjvictor
  • 2009年09月09日 14:30
  • 21235

LoadRunner基础入门教程

方法/步骤     1:LoadRunner是一款性能测试软件,通过模拟真实的用户行为,通过负载、并发和性能实时监控以及完成后的测试报告,分析系统可能存在的瓶颈,LoadRunner最为有效的手段之一...
  • Brave_insist
  • Brave_insist
  • 2017年05月12日 17:02
  • 2411

[问题记录.dotnet]取网卡信息报错"找不到"-WMI - Not found

System.Management.ManagementException: 找不到 System.Management.ManagementException: Not found 错误的解决...
  • debug_fan
  • debug_fan
  • 2016年03月24日 11:46
  • 827

net中的WMI编程(二):WMI中的WQL语言和WQL的测试工具

net中的WMI编程(二):WMI中的WQL语言和WQL的测试工具  http://blog.csdn.net/zhoufoxcn/archive/2008/01/14/2044246.aspx...
  • hefenghhhh
  • hefenghhhh
  • 2008年01月15日 10:55
  • 291

GCC使用教程

目 录 gcc makefile写法 gcc_egcs使用 gdb使用 gcc常用选项对代码的影响 ...
  • ejzhang
  • ejzhang
  • 2007年12月14日 13:05
  • 5287

使用WMI控制Windows进程

本文主要介绍两种WMI的进行操作:检查进程是否存在、创建新进行代码如下:using System; using System.Collections.Generic; using System.Tex...
  • tjvictor
  • tjvictor
  • 2009年09月09日 11:53
  • 2879

c#与WMI使用

c#与WMI使用技巧集1、 什么是WMI WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然...
  • highfly2008
  • highfly2008
  • 2009年02月03日 18:48
  • 4694
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WMI 使用教程_.NET 入门教程
举报原因:
原因补充:

(最多只允许输入30个字)