【发布时间】:2019-07-04 22:20:46
【问题描述】:
所以我使用此代码来获取 S.M.A.R.T.来自 Windows WMI 的硬盘诊断信息:
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: '不支持'
有没有其他方法可以做到这一点,或者在这段代码中添加一些东西来使它工作?
【问题讨论】:
-
除了@BugFinder,我想补充一点,现在可以通过 System.IO.DriveInfo.GetDrives() 以更简洁的方式获取此信息
-
你可以尝试为非托管代码创建C#包装器docs.microsoft.com/en-us/windows/desktop/fileio/…,也可以在GitHub上查看一些应用程序的源代码github.com/mirror/smartmontools/blob/master/os_win32.cpp。
-
@BugFinder System.IO.DriveInfo.GetDrives() 仅提供基本信息。我正在寻找 S.M.A.R.T.属性
-
@TomasPangonis 您可以使用下一种方式作为临时解决方法(但首先检查它的 LICENSE 以确保这种方式是合法的):您可以安装 smartmontools 应用程序(github 链接 I在之前的评论中提到)并在您的应用程序中复制\使用其二进制文件。您可以使用其 CLI 获取有关所有驱动器的 SMART 信息:smartctl.exe -a /dev/sda 通过 Process.Start 等运行它并获取输出。