想C++/COM一样,通过C#使用dotNet一样可以进行查询和调用方法
查询的基本过程如下:
1.引用WMI的.NET类库
在项目->引用里面添加对System.Management命名空间所在dll:System.Management.dll的引用。
2.创建ManagementObjectSearcher类的实例
ManagementObjectSearcher类用于根据指定的查询或枚举检索管理对象的集合。
3.执行查询
ManagementObjectSearcher类的Get方法用于执行查询
A同步方式:
默认的查询方式,执行查询方法以后查询线程等待方法返回,查询方法在得到所有结果集以后才返回。这种方式适合与查询数据量不大,查询时间很短的情况。
同步情况下,返回一个 ManagementObjectCollection,它包含匹配指定查询的对象。
B异步方式:
异步查询需要在执行查询方法的时候,需要传入类型为ManagementOperationObserver的参数。查询到对象后由ManagementOperationObserver对象的ObjectReady事件通知,查询得到的对象在ObjectReady事件参数的NewObject属性中。
异步情况下,每查询到一个对象,触发一次ManagementOperationObserver类的ObjectReady事件,我们在事件处理过程中获取对象的值。
4.处理结果
同步查询方式下,枚举ManagementObjectCollection对象里面的元素,即可获得匹配对象;异步方式下, 通过ObjectReadyEventArgs对象的NewObject属性取出匹配对象。
调用方法的基本过程如下:
1.取得Provider类或者它的实例对象
这行代码结果是取得了Win32_Process的类,但没有生成它的实例。通过它,只能调用Win32_Process的静态方法。
这行代码取得了Win32_Service类的一个实例,通过它,可以调用Win32_Service的静态方法和实例方法。
2.生成Provider提供方法的参数的对象
提供一个object数组,或者ManagementBaseObject类型的对象,里面存储调用函数的参数,然后将object数组或ManagementBaseObject类型的对象传给执行provider方法的函数。
3.调用方法
调用ManagementClass或ManagementObject的InvokeMethod()方法,执行provider的方法。
查询的基本过程如下:
1.引用WMI的.NET类库
在项目->引用里面添加对System.Management命名空间所在dll:System.Management.dll的引用。
2.创建ManagementObjectSearcher类的实例
ManagementObjectSearcher类用于根据指定的查询或枚举检索管理对象的集合。
3.执行查询
ManagementObjectSearcher类的Get方法用于执行查询
A同步方式:
默认的查询方式,执行查询方法以后查询线程等待方法返回,查询方法在得到所有结果集以后才返回。这种方式适合与查询数据量不大,查询时间很短的情况。
同步情况下,返回一个 ManagementObjectCollection,它包含匹配指定查询的对象。
ManagementObjectCollection result = search.Get();
foreach (ManagementObject info in result)
...{
Console.WriteLine("Name: {0}", info["name"])
}
foreach (ManagementObject info in result)
...{
Console.WriteLine("Name: {0}", info["name"])
}
异步查询需要在执行查询方法的时候,需要传入类型为ManagementOperationObserver的参数。查询到对象后由ManagementOperationObserver对象的ObjectReady事件通知,查询得到的对象在ObjectReady事件参数的NewObject属性中。
异步情况下,每查询到一个对象,触发一次ManagementOperationObserver类的ObjectReady事件,我们在事件处理过程中获取对象的值。
ManagementOperationObserver results = new
ManagementOperationObserver();
// 连接事件处理程序
results.ObjectReady += new
ObjectReadyEventHandler(this.NewObject);
results.Completed += new
CompletedEventHandler(this.Done);
searcher.Get(results);
//事件处理过程:
private void NewObject(object sender,
ObjectReadyEventArgs obj)
...{
Console.WriteLine("Name: {0}", info["name"])
}
private void Done(object sender,
CompletedEventArgs obj)
...{
isCompleted = true;
}
ManagementOperationObserver();
// 连接事件处理程序
results.ObjectReady += new
ObjectReadyEventHandler(this.NewObject);
results.Completed += new
CompletedEventHandler(this.Done);
searcher.Get(results);
//事件处理过程:
private void NewObject(object sender,
ObjectReadyEventArgs obj)
...{
Console.WriteLine("Name: {0}", info["name"])
}
private void Done(object sender,
CompletedEventArgs obj)
...{
isCompleted = true;
}
同步查询方式下,枚举ManagementObjectCollection对象里面的元素,即可获得匹配对象;异步方式下, 通过ObjectReadyEventArgs对象的NewObject属性取出匹配对象。
调用方法的基本过程如下:
1.取得Provider类或者它的实例对象
ManagementClass processClass = new ManagementClass("Win32_Process");
ManagementObject classInstance =
new ManagementObject("root/CIMV2",
"Win32_Service.Name='PlugPlay'",
null);
new ManagementObject("root/CIMV2",
"Win32_Service.Name='PlugPlay'",
null);
2.生成Provider提供方法的参数的对象
提供一个object数组,或者ManagementBaseObject类型的对象,里面存储调用函数的参数,然后将object数组或ManagementBaseObject类型的对象传给执行provider方法的函数。
3.调用方法
调用ManagementClass或ManagementObject的InvokeMethod()方法,执行provider的方法。