dotNet对于WMI的支持
.NET框架中与WMI规范有关的命名空间有两个,分别是System.Management和System.Management.Instrumentation命名空间。前者用来访问标准WMI提供程序提供的功能,获取系统信息,或者执行提供程序的方法(比如修改系统的属性、执行关机动作等)等;后者则是用来注册新提供程序、创建新类和发布实例。
System.Management命名空间中的类主要有:
ManagementClass——管理类
ManagementClass的构造函数输入参数为WMI类名称,标识管理对象(相当于COM中的IWbemServices ),例如:
diskman代表Win32平台下的整个逻辑磁盘的管理对象。
ManagementObjectCollection——管理对象的集合。(相当于COM中的枚举器IEnumWbemClassObject)
ManagementObject——为具体的数据管理对象,(相当于COM中的IWbemClassObject)。
对于上面的例子而言,可以对应逻辑磁盘的C分区管理对象。看下面的代码:
disks为逻辑磁盘分区C,D,E…的集合,对于每一个逻辑分区,由一个disk对象管理其数据,并输出名称,文件系统和磁盘空间大小。
ManagementQuery
用作所有查询类的基础,作为查询的抽象基类,可以继承以实现其方法,它被声明为abstract的,这意味着我们不能创建一个该类的实例,但可以用该类型的对象代表它的所有派生类对象。.NET提供了从ManagementQuery两个派生的类: EventQuery和ObjectQuery分别用于查询管理事件和管理对象,而我们通常使用的SelectQuery是从ObjectQuery派生而来,详细请参见.NET Class Library Reference。
ManagementObjectSearcher
用于根据指定的查询或枚举检索管理对象的集合。
以上代码指定searcher的查询为selectQuery,即Win32逻辑磁盘的集合查询,然后将这些逻辑磁盘分区输出。也可以直接使用WQL查询语句来实例化ManagementObjectSearcher对象:
ManagementEventWatcher
用于预订WMI事件通知。
.NET框架中与WMI规范有关的命名空间有两个,分别是System.Management和System.Management.Instrumentation命名空间。前者用来访问标准WMI提供程序提供的功能,获取系统信息,或者执行提供程序的方法(比如修改系统的属性、执行关机动作等)等;后者则是用来注册新提供程序、创建新类和发布实例。
System.Management命名空间中的类主要有:
ManagementClass——管理类
ManagementClass的构造函数输入参数为WMI类名称,标识管理对象(相当于COM中的IWbemServices ),例如:
diskman = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection——管理对象的集合。(相当于COM中的枚举器IEnumWbemClassObject)
ManagementObject——为具体的数据管理对象,(相当于COM中的IWbemClassObject)。
对于上面的例子而言,可以对应逻辑磁盘的C分区管理对象。看下面的代码:
ManagementObjectCollection disks = diskman.GetInstances();
foreach (ManagementObject disk in disks)
...{
Console.WriteLine("Disk = {0}" , disk["Name"].ToString());
Console.WriteLine("Disk = {0}" , disk["FileSystem"].ToString());
Console.WriteLine("Disk = {0}" , disk["Size"].ToString());
}
foreach (ManagementObject disk in disks)
...{
Console.WriteLine("Disk = {0}" , disk["Name"].ToString());
Console.WriteLine("Disk = {0}" , disk["FileSystem"].ToString());
Console.WriteLine("Disk = {0}" , disk["Size"].ToString());
}
ManagementQuery
用作所有查询类的基础,作为查询的抽象基类,可以继承以实现其方法,它被声明为abstract的,这意味着我们不能创建一个该类的实例,但可以用该类型的对象代表它的所有派生类对象。.NET提供了从ManagementQuery两个派生的类: EventQuery和ObjectQuery分别用于查询管理事件和管理对象,而我们通常使用的SelectQuery是从ObjectQuery派生而来,详细请参见.NET Class Library Reference。
ManagementObjectSearcher
用于根据指定的查询或枚举检索管理对象的集合。
SelectQuery selectQuery = new SelectQuery("win32_logicaldisk");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject disk in searcher.Get())
...{
Console.WriteLine(disk.ToString());
}
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject disk in searcher.Get())
...{
Console.WriteLine(disk.ToString());
}
ManagementObjectSearcher search =
new ManagementObjectSearcher(“SELECT * FROM Win32_ LogicalDisk”);
new ManagementObjectSearcher(“SELECT * FROM Win32_ LogicalDisk”);
ManagementEventWatcher
用于预订WMI事件通知。