即用型管理课程

时间:2011-11-21 16:27:54

标签: c# system.management

我知道如何访问管理对象。让我们说一下:

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter");            
foreach (var nic in searcher.Get())
{                
    Console.WriteLine(nic["caption"]);
}

现在这个nic [] - synthax使用非常糟糕。如果我看一下visual studio服务器资源管理器,我看,它为我选择的每个对象填充了一个属性网格。闻起来就像他们在那里创建可绑定的类。是否有任何库或方法来做同样的事情?我想得到像

这样的语法
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter");            
foreach (var nic in searcher.Get())
{                
    Console.WriteLine((nic as Win32NetworkAdapter).Caption);
}

我只是不想浪费时间去实施已经发明的新东西!

3 个答案:

答案 0 :(得分:2)

为什么不使用Visual Studio中的Mgmtclassgen.exe (Management Strongly Typed Class Generator)

答案 1 :(得分:1)

WMI接受查询并返回一组不确定的结果。该查询类似于SQL,因此它可能只返回某些列。属性网格只是将每个返回的值枚举为单独的名称和值。任何查询结果都没有固定的列集。因此,您需要从返回的列表中显式获取每个。

答案 2 :(得分:0)

为了让别人像我一样快乐,我创造了一个解决我问题的T4。它记录在http://www.codingfreaks.de/2011/11/22/t4-fur-wmi-zugriff/(德语!!!),可以在http://www.codingfreaks.de/files/wmi01/WmiHelper.tt获得。为了使它工作,只需

  1. 将其添加到VS中的项目。
  2. 添加名为“Classes.txt”的文本文件。
  3. 为要在“Classes.txt”中使用的每个WMI-Class添加一行(例如“Win32_NetworkAdapter”)
  4. 右键单击项目中的tt文件,然后使用“用户自定义工具”。
  5. 转到您的代码并输入WmiHelper。*
  6. 享受!