是否可以确定Environment.SpecialFolder.System 驱动器

我已经绕了一圈了,似乎在谷歌上也找不到答案。

正如标题所说,如果我得到 Windows 正在运行的当前驱动器盘符,让我们这样说:Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); 然后我可以确定它的 Win32_DiskDrive SerialNumber 吗?我找不到链接它们的方法。

这是制造商的序列号,而不是卷序列号。

提前致谢


慕盖茨4494581
浏览 92回答 2
2回答

守着星空守着你

您可以将ManagmentObjectSearch与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。

慕尼黑的夜晚无繁华

您可以使用 System.Management 中的 ManagementObjectSearcher 类,然后循环遍历属性来查找序列号。我认为沿着这些思路的东西会让你接近你正在寻找的东西......                var search = new ManagementObjectSearcher("select * from Win32_DiskDrive");                foreach (var mo in search.Get())                {                    if (mo["SerialNumber"] != null)                    {                        return mo["SerialNumber"].ToString();                    }                }
打开App,查看更多内容
随时随地看视频慕课网APP