管理对象的信息查询和方法访问
在这一节内容,我们将通过几个实例来学习如何查询管理对象信息和访问管理对象提供的方法,这一部分内容将使用到我们在前面讲述到的System.Management命名空间中的相关类对象。
管理对象的信息查询
管理对象的信息查询有两种方式,一种是直接枚举管理对象的各种属性,而获取我们感兴趣的数据;一种方法是通过SQL查询语句的方式来过滤冗余的数据,而得到感兴趣的数据。
对于一个Win32_LogicalDisk实例对象而言,它有那些属性,也就是它有那些信息可以供我们访问呢?这些属性名是什么样的?这是开发人员在开发过程中经常遇到的问题,通常我们是可以去查MSDN,但是在这里我给出一种通过编程的方法获取代码。
*****************************************************
//获取Win32_LogicalDisk WMI对象可供访问的属性
public static void FetchProperties()
{
ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");
diskClass.Get();
Console.WriteLine("Win32_LogicalDisk对象共有" + diskClass.Properties.Count + " 属性。");
. PropertyDataCollection diskProperties = diskClass.Properties;
foreach (PropertyData diskProperty in diskProperties)
{
Console.WriteLine("diskClass[{0}] ",diskProperty.Name);
}
}
*****************************************************
知道了那些属性可以供我们访问,下一步就是来具体的获取管理对象Win32_LogicalDisk的信息。首先用第一种方法,即枚举属性而回去数据的方法。在这里我们通过列举WMI类Win32_LogicalDisk实例对象的数据,获取您的计算机上各种逻辑磁盘分区,包括软驱和光驱,并输出每个逻辑磁盘分区的一些信息。
*****************************************************
//获取Win32_LogicalDisk对象的数据信息
public static void FetchInfo()
{
ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection disks = diskClass.GetInstances();
foreach (ManagementObject disk in disks)
{
Console.WriteLine("Disk_DeviceID= {0}" ,disk["DeviceID"].ToString());
Console.WriteLine("Disk_Name = {0}" , disk["Name"].ToString());
if(disk["FileSystem"]!=null)
Console.WriteLine("Disk_FileSystem = {0}" , disk["FileSystem"].ToString());
Console.WriteLine("Disk_Description = {0}" , disk["Description"].ToString());
if(disk["Size"]!=null)
Console.WriteLine("Disk_Size ={0} " ,System.Convert.ToInt64(disk["Size"].ToString()));
Console.WriteLine("Disk_type = {0}" , System.Convert.ToInt16(disk["DriveType"].ToString()));
}
}
*****************************************************
提示:(1)由于你的软驱和光驱的FileSystem和Size属性为空,所有加了if判断,否则输出会产生异常。
(2)Size属性的数据是以bytes字节为单位。
上面访问的方法其实很简单,我们再看看如何通过SQL查询的方式来访问管理对象的数据。以下的例子是以win32_Process管理对象为例。
*****************************************************
//通过SQL查询方式访问管理对象数据
public static void QueryInfo()
{
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("select * from Win32_Process");
foreach (ManagementObject process in searcher.Get())
{
Console.WriteLine("process = " + process["Name"]);
}
}
*****************************************************
至此,我们可以轻松的通过上面的方式访问管理对象的数据了。
管理对象方法的访问
在Windows2000的任务管理器中,我们可以终止进程,也可以启动进程;在服务管理器中,我们可以启动、暂停、7终止服务,那么您肯定会问通过程序怎样完成类似上面的任务。是的,对于那些可供用户操作的管理对象,它提供可一些公开的方法供客户端应用程序来调用,从而完成各种任务。上面的例子只是给出了单向的信息访问,接下来的内容,我们将看看如何访问管理对象的方法。
并不是所有的管理对象会公开方法,是否公开方法和公开那些方法取决于需要。对于逻辑磁盘来说,可能会公开一个Format的方法用于格式化磁盘,对于运行的进程来说,可能公开Start、Stop方法来开始终止进程。我们将以启动一个进程为例来说明这个问题。
创建一个进程,需要调用Win32_Process WMI对象的Create方法。Create方法有四个输入参数,分别为:
uint32 Create(
);
而在我们的客户端管理应用程序中并不是直接的调用Create方法来启动进程,而是通过调用ManagementClass. InvokeMethod()方法来间接启动进程的。InvokeMethod()方法有两种原型,一种是输入参数为数组,一种是输入参数为ManagementBaseObject对象,为了简单起见,我们在这里使用的是ManagementBaseObject对象作为输入和输出参数。
InvokeMethodOptions为调用方法的选项,包括调用延时等等。
由于WMI对象是如此之多,每个被管理的WMI对象的公开的方法又是不同的,InvokeMethod()方法是如何能区分这些不同的WMI对象以及WMI对象不同的公开方法,因为方法的不同就意味这参数不一样,因此我们还得知道Create这个特定的启动进程方法的参数。ManagementClass. GetMethodParameters()通过在运行时来获取不同的方法输入和输出参数。
解决了这些关键的问题,下面我们就可以看看代码是怎么实现的。
*****************************************************
//管理对象的方法调用
public static void InvokeMethod()
{
ManagementClass processClass = new ManagementClass("Win32_Process");
//取得输入参数
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = "notepad.exe";
//执行创建进程
ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams, null);
//显示创建进程的结果
Console.WriteLine("Creation of calculator process returned: " + outParams["returnValue"]);
Console.WriteLine("Process ID: " + outParams["processId"]);
}
*****************************************************
看看运行的结果,打开了一个记事本程序,同时输出类似下面的信息:
Creation of calculator process returned: 0
Process ID: 2340
分享到:
相关推荐
10:如何使用 WMI 管理远程计算机? 11:远程操作涉及到第三台计算机的时候为何失败? 12:为什么我的查询需要很长时间才能完成? 13:如何列出特定计算机上已经安装的所有应用? 14:如何获得性能计数器数据?
WMI简述:WMI是Windows Management Instrumentation (Windows管理工具)的缩写,是内置在 Windows 2000、Windows XP 和 Windows Server 2003 系列操作系统中核心的管理支持技术。 具体说来,WMI的本领如下: 1.获取...
系统管理编程实例:如何使用WMI查询处理器信息
Visual C++源代码 87 如何使用WMI查询处理器信息Visual C++源代码 87 如何使用WMI查询处理器信息Visual C++源代码 87 如何使用WMI查询处理器信息Visual C++源代码 87 如何使用WMI查询处理器信息Visual C++源代码 87 ...
Visual Basic编程访问WMI对象帮你了解windows的wmi如何利用
WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。...WMI查询可通过WMI命令查询系统的信息,本文档演示如何使用WMI查询。
Visual C++源代码 84 如何使用WMI查询声音设备信息Visual C++源代码 84 如何使用WMI查询声音设备信息Visual C++源代码 84 如何使用WMI查询声音设备信息Visual C++源代码 84 如何使用WMI查询声音设备信息Visual C++源...
好用的WMI查询工具 好用的WMI查询工具 好用的WMI查询工具 好用的WMI查询工具
Windows Management Instrumentation (WMI) Remote Protocol is a Distributed Component Object Model (DCOM), as specified in [MS-DCOM], a client/server–based framework that provides an open and automated...
Visual C++源代码 86 如何使用WMI查询串行端口信息Visual C++源代码 86 如何使用WMI查询串行端口信息Visual C++源代码 86 如何使用WMI查询串行端口信息Visual C++源代码 86 如何使用WMI查询串行端口信息Visual C++源...
使用wmi查询驱动设备信息
使用wmi查询声音设备信息
官方版WMI tools,系统检测工具。WMI工具包括:WMI CIM Studio:查看和编辑类,属性,限定词和在CIM储存库的实例;选定的运行方式;生成并编译MOF文件。 WMI对象浏览器:视图对象,编辑属性值和限定词和运行方法。
在.NET中,System.Management命名空间提供对系统管理信息和管理事件集合的访问,这些信息和事件是与Windows管理规范(WMI)结构对系统,设备和应用程序设置检测点有关的.一般情况下,应用程序和服务可以使用该命名空间下的...
使用wmi查询显示设备信息
Visual C++源代码 83 如何使用WMI查询显示设备信息Visual C++源代码 83 如何使用WMI查询显示设备信息Visual C++源代码 83 如何使用WMI查询显示设备信息Visual C++源代码 83 如何使用WMI查询显示设备信息Visual C++源...
使用wmi查询处理器信息
Windows系统WMI查询工具。 WMI强大检索功能。。。非常实用的工具
使用wmi查询串行端口信息
如何使用WMI查询驱动设备信息编程小程序,C++.net源代码编写,VisualStudio.net