【问题标题】:How to identify system hard drive using Win32_DiskDrive如何使用 Win32_DiskDrive 识别系统硬盘
【发布时间】:2019-05-25 08:22:21
【问题描述】:

我正在使用 WMI 获取有关计算机上的硬盘驱动器的信息,但我找不到可让我识别哪个硬盘驱动器用作安装 Windows 的系统驱动器的属性。

ManagementObjectSearcher mos_HDD = new ManagementObjectSearcher("select * from Win32_DiskDrive");

我尝试遍历所有属性,但看起来都没有包含我需要的信息。

foreach (ManagementObject mo_HDD in mos_HDD.Get())
{
      Console.WriteLine("HDD Properties:");
      foreach (PropertyData pd in mo_HDD.Properties)
      {
           Console.WriteLine("\tName: {0} \tValue: {1}", pd.Name, pd.Value != null ? pd.Value.ToString() : "NULL");
      }
} 

我还查看了 MSDN 文档,但运气不佳。

我在这里要做的是获取系统驱动器的某种标识符(例如签名或序列号)。

非常感谢您对获取此信息的任何帮助。

【问题讨论】:

    标签: c# wmi


    【解决方案1】:

    你可以得到它:

      public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_DiskDrive"); 
    
                foreach (ManagementObject queryObj in searcher.Get())
                {                 
                    Console.WriteLine("SerialNumber: {0}", queryObj["SerialNumber"]);
                    Console.WriteLine("Signature: {0}", queryObj["Signature"]);
                }
            }
            catch (ManagementException e)
            {
    
            }
        }
    

    【讨论】:

      【解决方案2】:

      您链接的文档有答案:

      string   SerialNumber;
      uint32   Signature;
      

      您的管理对象将包含这些属性。

      如果这些值是 null,那么问题是您使用的 Windows 版本不支持它们。

      SerialNumber
      ...
      Windows Server 2003 and Windows XP:  This property is not available.
      

      在这种情况下,您必须使用 Signature 属性,但我相信这需要 XP SP3。

      【讨论】:

      • 感谢您提供详细信息。我检查了这两个,并且 SerialNumber 看起来很好,但问题是系统中有多个硬盘时。我怎么知道哪个是系统分区?
      • 查找包含Win32_LogicalDisk 的驱动器,其中DeviceID == C:(或安装Windows 的任何驱动器号)
      • 我找不到解决方案,但这是最接近的,所以我将其标记为答案。
      【解决方案3】:

      有一个类似于 Win32_Diskdrive 的类 Win32_LogicalDisk,它具有卷,而不是物理磁盘。它有一个包含驱动器号的名称属性。

      环境变量 %SystemRoot% 具有 windows 所在的路径(例如 D:\windows) 也在注册表中 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion SystemRoot。

      因此您可以将 SystemRoot 驱动器号与 Win32_LogicalDisk 中的 Name 属性进行比较。

      我相信有一种方法可以从 Win32_Diskdrive 的属性中获取卷列表,但我没有尝试过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 2014-02-01
        • 1970-01-01
        相关资源
        最近更新 更多