C# 进行WMI操作的内容封装在System.Management.dll中,具体的在MSDN有详细描述,默认是用[“**’]去读取和设置属性等。
此处介绍一个自动生成强类型的包装软件,这样处理起来就简单了很多,不用在反复的查看参数等信息了。
1、 使用WMIExplorer生成WMI对应的包装类
2、 针对生成类可以进行强类型操作。
WMIExplorer可以在http://www.primaltools.com/downloads/communitytools/中找到。
如上图示,选择需要操作的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