WMI in C#[强类型操作]

简介: C# 进行WMI操作的内容封装在System.Management.dll中,具体的在MSDN有详细描述,默认是用[“**’]去读取和设置属性等。 此处介绍一个自动生成强类型的包装软件,这样处理起来就简单了很多,不用在反复的查看参数等信息了。

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

相关文章
|
6月前
|
存储 安全 编译器
C# 11.0中的泛型属性:类型安全的新篇章
【1月更文挑战第23天】C# 11.0引入了泛型属性的概念,这一新特性为开发者提供了更高级别的类型安全性和灵活性。本文将详细探讨C# 11.0中泛型属性的工作原理、使用场景以及它们对现有编程模式的改进。通过深入了解泛型属性,开发者将能够编写更加健壮、可维护的代码,并充分利用C#语言的最新发展。
|
编译器 C#
C#之十七 局部类型
C#之十七 局部类型
32 0
|
8天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
17 3
|
7天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
19 1
|
5天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
6 0
|
1月前
|
C#
C# 可空类型(Nullable)
C# 单问号 ? 与 双问号 ??
45 12
|
3月前
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
96 7
|
3月前
|
程序员 C#
C# 语言类型全解
C# 语言类型全解
23 0
|
3月前
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结
|
3月前
|
传感器 开发框架 JSON
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
143 0