【问题标题】:WMI Query Library C#WMI 查询库 C#
【发布时间】:2017-04-10 18:48:40
【问题描述】:

我很难理解为什么没有一个 WMI 查询库 在这里或谷歌指出。只需接口即可查询 WMI 以获取信息。我所能找到的只是“写一个像这样的新查询......” - 整个网络上的主题风格对我来说毫无意义,而我正在处理数百个查询。

所以,这是我目前正在努力构建的一个:

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[][])刚开始测试,如果返回元组(我几年前成功使用过)会是更好的选择。

那么,任何人都知道,是否已经编写了库? 如果没有,那么从参考 DLL 库进行上述查询的最佳方法是什么?

【问题讨论】:

  • 好吧,不得不说'WmiLight'-Project 至少是有趣的阅读,但在上面的 nuget 列表中看不到任何其他内容,这甚至接近我所追求的。这是我上面所说的完美示例,似乎没有任何编写的任何库可以简单地使用 1 行代码返回数据。
  • 或者当然可能是我太愚蠢了,无法理解将整个查询写入应用程序的意义。虽然我们应该拥有执行相同功能的库,但线程和处理返回之间的数据只需定义容器存储库中使用的方法并在需要处理时将其存储在其中即可使用。

标签: c# winforms wmi


【解决方案1】:

我知道这个问题很老了。但是您可以使用ORMi 库。我认为它会满足您的需求。

例如:

1) 定义你的类:

[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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多