我已经困惑了一段时间,似乎在谷歌上也找不到答案。
如标题所述,如果我获取当前 Windows 运行的驱动器号,例如:Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
那么我是否可以确定其 Win32_DiskDrive 序列号?我找不到将它们联系起来的方法。
这是制造商的序列号而不是 VolumeSerialNumber。
提前感谢。
我已经困惑了一段时间,似乎在谷歌上也找不到答案。
如标题所述,如果我获取当前 Windows 运行的驱动器号,例如:Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
那么我是否可以确定其 Win32_DiskDrive 序列号?我找不到将它们联系起来的方法。
这是制造商的序列号而不是 VolumeSerialNumber。
提前感谢。
public static string GetSerialNumber(string logicalDrive)
{
using (var partitionsQuery = new ManagementObjectSearcher(string.Format("ASSOCIATORS OF {{Win32_LogicalDisk.DeviceID='{0}'}} WHERE ResultClass = Win32_DiskPartition", logicalDrive)))
{
foreach (var results in partitionsQuery.Get())
{
using (var diskDrives = new ManagementObjectSearcher(string.Format("ASSOCIATORS OF {{Win32_DiskPartition.DeviceID='{0}'}} WHERE ResultClass=Win32_DiskDrive", results["DeviceID"])))
{
foreach (var d in diskDrives.Get())
{
Console.WriteLine("Serial: " + d["SerialNumber"]);
return d["SerialNumber"].ToString();
}
}
}
}
return null;
}
使用方法:
var num = GetSerialNumber(Path.GetPathRoot(Environment.SystemDirectory).TrimEnd(new [] {'\\'}));
Path.GetPathRoot
返回的路径中删除反斜杠。 var search = new ManagementObjectSearcher("select * from Win32_DiskDrive");
foreach (var mo in search.Get())
{
if (mo["SerialNumber"] != null)
{
return mo["SerialNumber"].ToString();
}
}
https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskdrive
^ 那应该包含您可以获取的所有各种属性
希望这有所帮助。