WMI 查询库 C#
WMI Query Library C#
我很难理解为什么没有一个 WMI 查询库
在这里或 google 指出。简单的接口来查询 WMI 的信息。我所能找到的只是整个网络上 "write a new query like this..." 风格的主题,这对我来说毫无意义,而我正在处理数百个查询。
所以,这是我目前正在努力构建的:
using System;
using System.Management;
namespace hardware
{
public class Info
{
public static Tuple<string[], int, int> Query(string Select, string From, string Where = null, string Answer = null, string Root = "root\CIMV2")
{
int Count = 0;
string[] Values = Select.Split(',');
if (Where != null && Answer != null)
{
ManagementObjectSearcher s = new ManagementObjectSearcher(Root, "SELECT " + Select + " FROM " + From + " WHERE " + Where + " = '" + Answer + "'");
string[] res = new string[Values.Length];
foreach (ManagementObject wQuery in s.Get())
{
foreach (string value in Values)
{
res[Count] = Convert.ToString(wQuery[value]);
Count++;
}
}
var result = new Tuple<string[], int, int> (res, Values.Length, Count);
return result;
}
else
{
ManagementObjectSearcher s = new ManagementObjectSearcher(Root, "SELECT " + Select + " FROM " + From);
string[] res = new string[Values.Length];
foreach (ManagementObject wQuery in s.Get())
{
foreach (string value in Values)
{
res[Count] = Convert.ToString(wQuery[value]);
Count++;
}
}
var result = new Tuple<string[], int, int>(res, Values.Length, Count);
return result;
}
}
}
}
几周来我一直在努力超越工作状态。来自基本的字符串多维数组(return string[] or string[][])刚开始测试,如果returning元组(我几年前成功使用过)会更好.
所以,有人知道,是否已经编写了库?
如果没有,那么从参考 DLL 库执行上述查询的最佳方法?
我知道这个问题很老了。但是你可以使用 ORMi 库。我认为它正好适合您的需求。
例如:
1) 定义你的 class:
[WMIClass("Win32_Processor")]
public class Processor
{
public string Name { get; set; }
[WMIProperty("NumberOfCores")]
public int Cores { get; set; }
public string Description { get; set; }
}
2) 查询:
WMIHelper helper = new WMIHelper("root\CimV2");
List<Processor> processors = helper.Query<Processor>().ToList();
3) 或惰性编码选项:
var processors = helper.Query("SELECT * FROM Win32_Processor");
您可以在此处找到更多信息:
https://github.com/nicoriff/ORMi
https://medium.com/@luque.nicolas/compare-ormi-and-traditional-net-wmi-implementation-f00db26d10a3
我很难理解为什么没有一个 WMI 查询库 在这里或 google 指出。简单的接口来查询 WMI 的信息。我所能找到的只是整个网络上 "write a new query like this..." 风格的主题,这对我来说毫无意义,而我正在处理数百个查询。
所以,这是我目前正在努力构建的:
using System;
using System.Management;
namespace hardware
{
public class Info
{
public static Tuple<string[], int, int> Query(string Select, string From, string Where = null, string Answer = null, string Root = "root\CIMV2")
{
int Count = 0;
string[] Values = Select.Split(',');
if (Where != null && Answer != null)
{
ManagementObjectSearcher s = new ManagementObjectSearcher(Root, "SELECT " + Select + " FROM " + From + " WHERE " + Where + " = '" + Answer + "'");
string[] res = new string[Values.Length];
foreach (ManagementObject wQuery in s.Get())
{
foreach (string value in Values)
{
res[Count] = Convert.ToString(wQuery[value]);
Count++;
}
}
var result = new Tuple<string[], int, int> (res, Values.Length, Count);
return result;
}
else
{
ManagementObjectSearcher s = new ManagementObjectSearcher(Root, "SELECT " + Select + " FROM " + From);
string[] res = new string[Values.Length];
foreach (ManagementObject wQuery in s.Get())
{
foreach (string value in Values)
{
res[Count] = Convert.ToString(wQuery[value]);
Count++;
}
}
var result = new Tuple<string[], int, int>(res, Values.Length, Count);
return result;
}
}
}
}
几周来我一直在努力超越工作状态。来自基本的字符串多维数组(return string[] or string[][])刚开始测试,如果returning元组(我几年前成功使用过)会更好.
所以,有人知道,是否已经编写了库? 如果没有,那么从参考 DLL 库执行上述查询的最佳方法?
我知道这个问题很老了。但是你可以使用 ORMi 库。我认为它正好适合您的需求。
例如:
1) 定义你的 class:
[WMIClass("Win32_Processor")]
public class Processor
{
public string Name { get; set; }
[WMIProperty("NumberOfCores")]
public int Cores { get; set; }
public string Description { get; set; }
}
2) 查询:
WMIHelper helper = new WMIHelper("root\CimV2");
List<Processor> processors = helper.Query<Processor>().ToList();
3) 或惰性编码选项:
var processors = helper.Query("SELECT * FROM Win32_Processor");
您可以在此处找到更多信息:
https://github.com/nicoriff/ORMi
https://medium.com/@luque.nicolas/compare-ormi-and-traditional-net-wmi-implementation-f00db26d10a3