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

visual|程序|网络

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

时间: 2024-11-03 21:57:35

Visual C#中用WMI编写网络应用程序的相关文章

用c#写代码-Visual Studio中用C#编写相关程序

问题描述 Visual Studio中用C#编写相关程序 在Visual Studio中用C#编写奇数的累加和,我的代码写出来了但是不能运行,请各位帮忙看一下哪里出错了: int number, i, sum; sum = 0; number = Convert.ToInt(txtNumber.Text); for(i=1;i<=number;i=i+2) {sum=sum+i;} lblResult.Text = Convert.ToString(sum); 解决方案 int number =

《Visual C++ 开发从入门到精通》——1.3 利用Visual C++ 6.0编写C++程序

1.3 利用Visual C++ 6.0编写C++程序 知识点讲解:光盘视频PPT讲解(知识点)第1章利用Visual C++ 6.0编写C++程序.mp4 实例003 编写.调试和运行一个标准的C++程序源码路径 光盘daimapart 01 视频路径 光盘视频实例第1章003 本实例的功能是,使用Visual C++6.0编写.调试并运行一个标准的C++程序.本实例的具体实现流程如下. (1)选择File→New命令,在New对话框中选择Win32 Console Application项,

Visual C#中用WMI控制远程计算机

visual|控制 WMI不仅可以获取想要的计算机数据,而且还可以用以远程控制.远程控制计算机不仅是黑客们的梦想,也是大多数网络管理者所渴望得到的,尤其在现代的网络中,每一个网络管理者所面对的局域网,都是由一个庞大的计算机群组成,如果有效的管理网络的每一台计算机就显得格外重要了.目前网络管理软件通常的做法是,在远程计算机上运行客户端后台程序,在本地计算机上运行一个服务器端前台控制程序,通过这二个程序直接的通讯实现对计算机的远程控制.这种作法的缺点是十分明显的,当客户端关闭了后台程序,这种远程管理

用RMI编写网络应用程序

    从Java入门至今已有一年光景.现在谈谈一年心得.首先,Java基础是必须学好的,必须掌握Java的语法规则.接下来 就是awt下的Grahpics和swing包,应用程序编程必学,io下面也是极其重要的内容,再就到了网络编程方面,刚开始接触到 的是Socket编程,初学Java两个月便用Socket编程写"四国大战"(因为我对联众四国大战特有兴趣),写这个游戏整整花了 我一个月时间,每天是上课编程,下课编程,每天晚上忙到12点,甚至做梦也在编程,一个月后,整完了,四国大战也可

Visual C#中用WMI获取远程计算机信息

visual 如果不使用WMI,想要获取远程计算机的系统数据,最常用的方法就是在远程计算机上运行一个客户端程序,本地机通过和这个客户端程序来获取远程计算机的系统数据.这种实现方法无论是程序设计还是后面的程序分发都是及其困难的.而使用WMI,一切就显得非常简单.下面介绍的这个示例,其功能是利用WMI获取远程计算机硬盘数据.各位只需对这个程序稍加修改,就可以获得远程计算机的其他数据.下面是具体的实现步骤: 版权声明:任何获得天极网授权的网站,转载时请务必保留作者信息和以下链接 天极开发ASP.NET

C#中使用WMI编写网络程序

WMI是Windows Management Instrumentation的简称,即:视窗管理规范.在 Windows 2000或以后的版本中均安装得有,NT4.0则需要安装WMI的核心组件.通 过WMI可以获取远程计算机的各种数据信息,控制远程计算机的各种行为,而这就 像操作本地机一样方便.简单. 一.WMI简介 WMI从根本上说应该为一种服务,并且对于本地不同的用户,WMI所有的权限也 不一样.计算机超级用户可以为计算机中的每一个用户,设定不同的WMI权限.在 默认状态下,超级用户拥有WM

VC++编写电子邮件程序

一.概述---- 本文主要讲述如何使用Visual C++用MAPI编写E-mail程序.MAPI是包含在Windows之中的,因此不需要安装其他额外的部件.MAPI有以下三种形式:SMAPI,Simple MAPI,简单的MAPICMC,Common Messaging Calls,一般通讯调用完整的MAPI---- SMAPI和CMC都包含在完整的MAPI中,当用户想执行一些高级操作,比如编写自己的E-mail服务器的时候,必须使用完整的MAPI.本文主要阐述如何编写能够收发电子邮件的程序,

char-VS2010下编写基于TCP的网络应用程序运行出现乱码,一堆“烫”字,求高手救命

问题描述 VS2010下编写基于TCP的网络应用程序运行出现乱码,一堆"烫"字,求高手救命 客户端:#include #include #pragma comment(libws2_32.lib"")void main(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1 1 );err = WSAStartup( wVersionRequested

有c#语句编写程序-Vidual Studio中用c#语言编写相关程序

问题描述 Vidual Studio中用c#语言编写相关程序 在Vidual Studio中,如何用C#语句表示两个TextBox中的内容相除并赋予到另一个TextBox中,希望大家帮我解决一下,谢了. 解决方案 textBox3.Text = (double.Parse(textBox1.Text) / double.Parse(textBox2.Text)).ToString(); 解决方案二: 楼上正解,如果不会的时候可以先分成3个语句写,然后拼成一个