首页 > 解决方案 > 通过 WMI .NET C# 检索硬盘驱动器信息

问题描述

因此,我使用此代码从 Windows WMI 获取 SMART 硬盘驱动器诊断信息:

http://vasters.com/archive/Reading-ATAPI-SMART-Data-From-Drives-Using-NET-Temperature-Anyone.html

它适用于大多数计算机,但不适用于其他计算机。经过一些研究和样本测试后,我发现它不适用于硬盘驱动器连接到 PCI Express 而不是 SATA 的计算机。

var searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData");
    foreach (ManagementObject queryObj in searcher.Get())
    {
          //do stuff
    }

这是我得到异常的地方:

System.Management.ManagementException:“不支持”

有没有其他方法可以做到这一点,或者在这段代码中添加一些东西来使它工作?

标签: c#.netwmi

解决方案


我到处搜索此代码,找不到适合我的代码,但最终在另一个论坛上找到了,所以它的使用非常简单。仅从我的示例中获取 WMI 信息的另一种方式。您可以在 Microsoft 文档https://github.com/Mityugin/greentest中找到 WMI Win32_DiskDrive 的更多属性

string NamespacePath = "\\\\.\\ROOT\\cimv2";
string ClassName = "Win32_DiskDrive";
oClass = new ManagementClass(NamespacePath + ":" + ClassName);
            foreach (ManagementObject oObject in oClass.GetInstances())
            {
                var sign = Convert.ToString(oObject["Signature"]);
                var model = Convert.ToString(oObject["Model"]);
                var status = Convert.ToString(oObject["Status"]);

                if (Equals(sign,""))
                {
                    TextBox1.AppendText("DISK model: " + model);
                    TextBox1.AppendText(Environment.NewLine);
                    TextBox1.AppendText("Status: " + status);
                    TextBox1.AppendText(Environment.NewLine);

                    if (!status.Equals("OK") || !model.Contains("SSD"))
                    {
                        //Here is info if Disk is not OK or model not SSD
                    }
                }


            }

推荐阅读