【问题标题】:Suggest another way for accesing win32_processor建议另一种访问 win32_processor 的方式
【发布时间】:2013-01-30 10:38:34
【问题描述】:

以下代码用于访问 Win32 处理器信息.... 是否有任何其他方式来获取 win32 处理器信息(如使用不同的类)。在这里,我使用了 WqlObjectQueryManagementObjectSearcher 类。

WqlObjectQuery wquery = new WqlObjectQuery("select * from Win32_Processor");
        ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(wquery);
        foreach (ManagementObject mo1 in searcher1.Get())
        {
            Console.WriteLine(mo1.ToString());
        }

我们可以使用任何其他类来获取win32处理器的属性

【问题讨论】:

  • 一切都取决于您需要什么信息。我不习惯获取这些信息,但是可以通过环境变量或注册表获取一些基本信息。
  • WMI 可以做同样的事情是这个 .NET 4.5 特定的还是你想为 .NET 3.5 做这个?
  • @Nick:谢谢 Nick,其实我的疑问是,我们可以使用 managementclass 来使用查询“Select * from win32_processor”。
  • @DJ:我正在使用 .net 3.5 框架。
  • 是否可以使用wmi..获取硬件和软件信息?

标签: c# .net wmi


【解决方案1】:

获取机器上运行的当前处理器名称

检查 WMI Explorer 以及它是使用 WMI Query Tool 的一个非常好的工具

MSDN WMI Queries

WMI Query Language

ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Processor")
foreach (ManagementObject mo in mos.Get())
{
    Console.WriteLine(mo["Name"]);
}

//获取名称、制造商、计算机名称等...

ManagementObjectSearcher mosQuery = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
ManagementObjectCollection queryCollection1 = mosQuery.Get();
foreach (ManagementObject manObject in queryCollection1)
{
    Console.WriteLine("Name : " + manObject["name"].ToString());
    Console.WriteLine("Version : " + manObject["version"].ToString());
    Console.WriteLine("Manufacturer : " + manObject["Manufacturer"].ToString());
    Console.WriteLine("Computer Name : " + manObject["csname"].ToString());
    Console.WriteLine("Windows Directory : " + manObject["WindowsDirectory"].ToString());
}

【讨论】:

  • DJ,我试过你的代码,它在运行时出现异常,你能告诉我为什么会这样吗?它显示管理异常。
  • 哪个代码/行导致异常我得到零错误你能告诉我你正在使用的代码吗..?谢谢
  • ManagementObjectSearcher mos = new ManagementObjectSearcher(new SelectQuery("Win32_LogicalDisk")); ManagementObjectCollection moc = mos.Get(); foreach (moc 中的 ManagementObject mo) { Console.WriteLine(mo["Name"].ToString()); Console.WriteLine(mo["version"].ToString()); Console.WriteLine(mo["csname"].ToString()); Console.WriteLine(mo["制造商"].ToString()); Console.WriteLine(mo["windowsdiscovery"].ToString()); }
  • @Gomathipriya 你得到一个例外,因为Win32_LogicalDisk object 没有“版本”属性。或者 csname、制造商或 windowsdiscovery。在使用之前始终检查属性是否为空。
【解决方案2】:

是的,绝对有可能使用 WMI 获得硬件和软件……微软提供了一个工具来导航 WMI 类和函数。该工具是Windows management Instrumentation tester。它可以通过在命令提示符下键入 wbemtest 打开。您可以使用该工具进行实验。此外,您可以查看此Link 和此link,并尝试从您的角度进行一些研究。

除此之外,您还可以将查询用作“select * from Win32_Processor where DeviceID=CPU0”,因为您想获取有关单处理器的信息

【讨论】:

  • 这是评论而非答案 Vikram 最好显示编码示例而不是仅发布链接。
  • @DJKRAZE :肯定会进入 cmets 部分。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
相关资源
最近更新 更多