是否可以确定 Environment.SpecialFolder.System 驱动器的 Win32_DiskDrive 序列号?
Is it possible to determine the Win32_DiskDrive SerialNumber of the Environment.SpecialFolder.System drive?
我一直在兜圈子,似乎也无法在 google 上找到答案。
如标题所说,如果我得到当前盘符 windows is 运行 on,我们这样说: Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
然后我可以确定它的 Win32_DiskDrive 序列号吗?我找不到 link 它们的方法。
那是制造商的 S/N 不是 VolumeSerialNumber。
提前致谢
您可以使用 System.Management 中的 ManagementObjectSearcher class,然后遍历属性以查找序列号。
我认为沿着这些方向的东西会让你接近你正在寻找的东西......
var search = new ManagementObjectSearcher("select * from Win32_DiskDrive");
foreach (var mo in search.Get())
{
if (mo["SerialNumber"] != null)
{
return mo["SerialNumber"].ToString();
}
}
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskdrive
^ 应该包含您可以获得的所有各种属性
希望对您有所帮助。
您可以使用ManagmentObjectSearch combined with ASSOCIATORS OF语句:
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
返回的路径中删除反斜杠。
我一直在兜圈子,似乎也无法在 google 上找到答案。
如标题所说,如果我得到当前盘符 windows is 运行 on,我们这样说: Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System));
然后我可以确定它的 Win32_DiskDrive 序列号吗?我找不到 link 它们的方法。
那是制造商的 S/N 不是 VolumeSerialNumber。
提前致谢
您可以使用 System.Management 中的 ManagementObjectSearcher class,然后遍历属性以查找序列号。
我认为沿着这些方向的东西会让你接近你正在寻找的东西......
var search = new ManagementObjectSearcher("select * from Win32_DiskDrive");
foreach (var mo in search.Get())
{
if (mo["SerialNumber"] != null)
{
return mo["SerialNumber"].ToString();
}
}
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskdrive
^ 应该包含您可以获得的所有各种属性
希望对您有所帮助。
您可以使用ManagmentObjectSearch combined with ASSOCIATORS OF语句:
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
返回的路径中删除反斜杠。