WMI in C#[强类型操作]

C# 进行WMI操作的内容封装在System.Management.dll中,具体的在MSDN有详细描述,默认是用[“**’]去读取和设置属性等。

此处介绍一个自动生成强类型的包装软件,这样处理起来就简单了很多,不用在反复的查看参数等信息了。

1、 使用WMIExplorer生成WMI对应的包装类

2、 针对生成类可以进行强类型操作。

WMIExplorer可以在http://www.primaltools.com/downloads/communitytools/中找到。

clip_image002

如上图示,选择需要操作的CIM类别,右键生成即可。生成类包括了各种属性和操作的方法。

以Win32_Process管理机器上的进程为例,针对生成的类的操作方法:

using ROOT.CIMV2.Win32;Process.StaticScope = this.scope;
var ps = Process.GetInstances();
foreach (var p in ps)
{
using(Process m = p as Process)
{
System.Diagnostics.Debug.WriteLine(m.Name);
if (m.Name == "notepad.exe")
{
m.Terminate(1);
}
}
}
uint pid;
Process.Create("notepad.exe", null, null, out pid);
var my = Process.GetInstances(this.scope, "ProcessId=" + pid.ToString());
if (my.Count > 0)
{
var i = my.GetEnumerator();
i.MoveNext();
Process p = i.Current as Process;
p.Terminate(1);
}

//另一种形式的对比:
ManagementObject mo = new ManagementClass(this.scope, new ManagementPath("MSFT_SIPESUserContactData"), new ObjectGetOptions()).CreateInstance();
                    mo["UserInstanceID"] = this.userId;
                    mo["SIPURI"] = sip;
                    mo["GroupID"] = groupIds;
                    mo["Name"] = name;
                    mo["Subscribed"] = true;
                    mo.Put();
 
                    SIPESUserContactData.StaticScope = this.scope;
                    SIPESUserContactData c = SIPESUserContactData.CreateInstance();
                    c.LateBoundObject["UserInstanceID"] = this.userId;
                    c.LateBoundObject["SIPURI"] = sip;
                    c.LateBoundObject["GroupID"] = groupIds;
                    c.LateBoundObject["Name"] = name;
                    c.LateBoundObject["Subscribed"] = true;
                     c.CommitObject();
以上可见,由于生成类中包括了属性名字,即使使用名字时,直接参考类就行了。

方便了很多。

这个例子是操作进程和Office Communicator服务器上的联系人的操作示例等。

http://cid-56b433ad3d1871e3.office.live.com/self.aspx/.Public/WMIDemo.zip

posted @ 2010-09-25 22:07  2012  阅读(1010)  评论(6编辑  收藏  举报