zoukankan      html  css  js  c++  java
  • Visual C#中操作WMI的类库简介

    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所示:

    VisualC#中用WMI编写网络应用程序

    图01:组件服务窗口

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

    VisualC#中用WMI编写网络应用程序

    关闭WMI服务

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

    VisualC#中用WMI编写网络应用程序

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

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

    VisualC#中用WMI编写网络应用程序

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

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

    VisualC#中用WMI编写网络应用程序

    图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编写网络应用程序,所使用的类库主要是使用了上面接收的这六个类。

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=722347
  • 相关阅读:
    Encryption (hard) CodeForces
    cf 1163D Mysterious Code (字符串, dp)
    AC日记——大整数的因子 openjudge 1.6 13
    AC日记——计算2的N次方 openjudge 1.6 12
    Ac日记——大整数减法 openjudge 1.6 11
    AC日记——大整数加法 openjudge 1.6 10
    AC日记——组合数问题 落谷 P2822 noip2016day2T1
    AC日记——向量点积计算 openjudge 1.6 09
    AC日记——石头剪刀布 openjudge 1.6 08
    AC日记——有趣的跳跃 openjudge 1.6 07
  • 原文地址:https://www.cnblogs.com/netwom/p/1085578.html
Copyright © 2011-2022 走看看