3

我正在使用 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文档,但没有运气。

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

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

4

3 回答 3

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)
        {

        }
    }
于 2013-08-05T02:54:51.133 回答
0

您链接的文档有答案:

string   SerialNumber;
uint32   Signature;

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

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

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

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

于 2013-08-01T21:10:55.053 回答
0

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

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

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

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

于 2019-05-25T00:22:21.353 回答