首页 > 开发 > 综合 > 正文

Visual C#中用WMI编写网络应用程序

2024-07-21 02:29:13
字体:
来源:转载
供稿:网友
,欢迎访问网页设计爱好者web开发。  wmi是windows management instrumentation的简称,即:视窗管理规范。在windows 2000或以后的版本中均安装得有,nt4.0则需要安装wmi的核心组件。通过wmi可以获取远程计算机的各种数据信息,控制远程计算机的各种行为,而这就像操作本地机一样方便、简单。

  一.wmi简介

  wmi从根本上说应该为一种服务,并且对于本地不同的用户,wmi所有的权限也不一样。计算机超级用户可以为计算机中的每一个用户,设定不同的wmi权限。在默认状态下,超级用户拥有wmi的一切权限。提供wmi服务是通过程序"winmgmt.exe"来实现的。可以从"system32/wbem"目录中找到这个文件。

  既然是服务,计算机使用者就可以享受这种服务,同样也可以关闭这种服务。具体的操作是:按顺序打开【控制面板】|【管理工具】|【组件服务】。wmi服务在组件服务中的显示名称为"windows management instrumentation"。具体如下图01所示:



图01:组件服务窗口

  选中【名称】栏中"windows management instrumentation",点击鼠标右键,在弹出的菜单中,选择【属性】,在【启动类型】选择框中选择"已禁用",然后在单击【停止】按钮,这样本地的wmi服务也就被关闭了。此时所有本地和远程的wmi调用均为非法。下图为关闭wmi服务后的界面:



关闭wmi服务

  计算机的超级用户在默认状态下拥有wmi的一切权限,并且可以为本地其他用户设置wmi权限。具体操作是,按顺序打开:【控制面板】|【管理工具】|【计算机管理】。选中【计算机管理】右边的【服务和应用程序】中的【wmi控件】。具体如图02所示:



图02:【计算机管理】对话框

  点击鼠标右键,在弹出的菜单中,选择【属性】。弹出【wmi控件属性】对话框中,选择【安全】页面。具体如图03所示:



图03: 打开wmi安全设置界面

  单击图9-4中【安全设置】按钮,弹出【安全设置root】对话框,通过其中的【添加】和【删除】按钮,可以设定本地有哪些用户拥有wmi权限,并通过【权限】选择栏为每一个用户设置不同的权限,具体如图04所示:



图04:设定本地用户的wmi权限


  通过上图,也可以发现计算机超级用户在默认状态的wmi权限都是允许的,并且这些权限都是无法删除的。

  二.visual c#中操作wmi的类库简介

  .net framework sdk对wmi提供了全面的支持,.net framework sdk为visual c#能够操作wmi提供了一个专门的命名空间"system.management"。在命名空间"system.management"中提供了大量用以处理和wmi相关的类、接口和枚举。

  命名空间"system.management"中的成员是非常复杂的,由于篇幅所限完全介绍这些成员是不可能的,也是没有要的。根据我的经验,认为要了解、掌握在visual c#中使用wmi,下面六个类应该是学习的重点,分别是connectionoptions、managementscope、objectquery、managementobjectsearcher、managementobjectcollection和managementobject。下面就简单介绍一下六个类:

  ·connectionoptions类

  connectionoptions类主要的功能是为建立的wmi连接提供所需的所有设置。在利用wmi对远程计算机进行操作的时候,首先要进行wmi连接,wmi连接主要是使用的是managementscope 类,成功完成wmi连接就要提供远程计算机wmi用户名和口令。connectionoptions类可以通过其属性来提供这些信息。表01是connectionoptions类的一些主要属性及其简单的说明。

属性 说明
authority 获取或设置将用于验证指定用户的权利。
locale 获取或设置将用于连接操作的区域设置。
password 提供用于wmi连接操作的口令。
username提供用于wmi连接操作的用户名。
     表01:connectionoptions类常用属性及其说明

  其中最常用的属性是password和username。

  ·managementscope 类

  通过managementscope类能够建立和远程计算机(或者本地计算机)的wmi连接,表示管理可操作范围。创建wmi连接可以通过二种方法:

  ( 1 ) . 利用构造函数,当使用下面构造函数初始化managementscope 类实例,同时也就建立了wmi连接,具体如下:

public managementscope (
string path ,
connectionoptions options
) ;

  参数:

  path managementscope的服务器和命名空间。

  options 包含有关连接的选项的 connectionoptions。

  使用构造函数是有风险的,因为如果不能根据提供的选项建立wmi连接,程序会程序异常,出现错误。

  下列代码是利用此构造函数构建建立managementscope实例,并建立于远程计算机majinhu的wmi连接:

system.management.connectionoptions conn = new connectionoptions ( ) ;
//设定用于wmi连接操作的用户名
conn.username = "wmi用户名";
//设定用户的口令
conn.password = "此用户名对应口令";
system.management.managementscope ms = new managementscope("//majinhu/root/cimv2", conn ) ;

  ( 2 ) . 利用managementscope中提供的connect方法:

  managementscope中的成员是非常少的,最常用的方法和属性各一个:常用属性是options,主要为wmi建立提供参数;常用方法是connect,通过它可以建立于远程计算机的wmi连接。下列是利用connect方法建立wmi连接的具体代码:

system.management.connectionoptions conn = new connectionoptions ( ) ;
//设定用于wmi连接操作的用户名
conn.username = "wmi用户名";
//设定用户的口令
conn.password = "此用户名对应口令";
system.management.managementscope ms = new managementscope("//majinhu/root/cimv2" ) ;
ms.options = conn ;
ms.connect ( ) ;
//建立wmi连接

  ·objectquery类

  objectquery类或其派生类用于在managementobjectsearcher中指定查询。程序中一般采用查询字符串来构造objectquery实例。其中的查询字符串是一种类似sql语言的wql语言。下面的objectquery类构造函数中最常见的一种,具体语法如下:

public objectquery (
string query
) ;

  参数:

  query 查询的字符串

  ·managementobjectsearcher类

  managementobjectsearcher主要是根据指定的查询检索wmi对象的集合。managementobjectsearcher组成成员也非常简单,其方法get方法是非常重要的,managementobjectsearcher通过get方法进行wmi查询,并把得到的结果集合。get方法的返回值是一个managementobjectcollection实例,它包含匹配指定查询的对象。

  表02是其managementobjectsearcher类的常用属性及其说明。

属性 说明
options 有关如何搜索对象的选项
query 在搜索器中调用的查询
scope 在其中查找对象的范围
      表02:managementobjectsearcher类常用属性及其说明

  ·managementobjectcollection类

  managementobjectcollection类非常简单,它主要表示 wmi 实例的不同集合其中包括命名空间、范围和查询观察程序等。创建managementobjectcollection类没有构造函数。

  ·managementobject类

  managementobject类为单个管理对象或类。通过managementobject中的方法可以调用managementobject对应的对象,从而执行相应的操作。managementobject类是一个内容丰富的类,表03和表04分别是其常用的属性和方法。

属性 说明
classpath 对象的类的路径。
options 检索对象时要使用的其他信息。
path 对象的 wmi 路径。
scope 此对象在其中驻留的范围。
       表03:managementobject类常用属性及其说明

方法说明
clone创建对象的一个副本。
copyto将对象复制到另一个位置。
delete 删除对象。
get 绑定到管理对象。
getrelated 获取与该对象(联系对象)相关的对象的集合。
getrelationships获取该对象的关联的集合。
invokemethod 调用对应的对象方法。
put 提交对对象所做的更改。
      表04:managementobject类常用方法及其说明

  下面就结合二个具体的示例来介绍visual c#中利用上述类,提供wmi掌握如何利用wmi编写网络应用程序,所使用的类库主要是使用了上面接收的这六个类。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表