我正在使用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文档,但没有运气。
我在这里要做的是获取系统驱动器的某种标识符(例如签名或序列号)。
非常感谢您获取此信息的任何帮助。
答案 0 :(得分: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)
{
}
}
答案 1 :(得分:0)
您链接的文档有答案:
string SerialNumber;
uint32 Signature;
您的管理对象将包含这些属性。
如果您为这些值获取null,那么问题是您使用的是不支持它们的Windows版本。
SerialNumber
...
Windows Server 2003 and Windows XP: This property is not available.
在这种情况下你必须使用Signature属性,但这需要XP SP3我相信。
答案 2 :(得分:0)
有一个类似于Win32_Diskdrive的类Win32_LogicalDisk,它具有卷,而不是物理磁盘。它具有包含驱动器号的name属性。
环境变量%SystemRoot%具有Windows所在的路径(例如D:\ windows) 同样在注册表Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion SystemRoot中。
因此,您可以将SystemRoot驱动器号与Win32_LogicalDisk的Name属性进行比较。
我相信有一种方法可以从Win32_Diskdrive的属性中获取卷列表,但是我还没有尝试过。