为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕盖茨4494581 2023-09-09 15:38:09
我已经绕了一圈了,似乎在谷歌上也找不到答案。正如标题所说,如果我得到 Windows 正在运行的当前驱动器盘符,让我们这样说:Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)); 然后我可以确定它的 Win32_DiskDrive SerialNumber 吗?我找不到链接它们的方法。这是制造商的序列号,而不是卷序列号。提前致谢
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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


查看完整回答
反对 回复 2023-09-09
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您可以使用 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();

                    }

                }


查看完整回答
反对 回复 2023-09-09
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信