首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定硬盘序列号?

确定硬盘序列号?
EN

Stack Overflow用户
提问于 2012-02-26 20:31:52
回答 2查看 2.4K关注 0票数 1

我正在C#中开发一个库,它使用以下3个变量生成一个唯一的硬件ID

  1. 机器名称
  2. MAC地址
  3. 硬盘序列号

我可以在.NET和Mono中获得机器名称和MAC地址,但是我只能获得.NET中的硬盘序列号。有没有人知道是否有任何可能的方法获得硬盘驱动器序列号,或者我应该使用另一个变量(例如: CPU名称、主板ID等)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-27 00:45:14

根据这份文件

Mac不支持从用户级应用程序获取硬盘序列号。

如果对mac用户的要求不是您的问题(或者您跳过mac版本),我有一种解决问题的方法:

使用这篇文章问题可以确定:

  1. 你是在运行Mono还是.NET
  2. 你在哪个站台?

如果您知道自己在LINUX系统上,就可以通过正在运行这样的系统命令获得hardrive串口。

代码语言:javascript
复制
/sbin/udevadm info --query=property --name=sda

在mac上,您可以使用磁盘实用程序 (作为root用户)获取硬盘串行。在windows上,您可以使用标准方法。

票数 1
EN

Stack Overflow用户

发布于 2017-08-17 12:21:46

您也可以通过ioreg获得用户权限。

从贝壳中:

-p IOService -n AppleAHCIDiskDriver -r|grep \“序列号\”{print '{print $NF;}‘

以编程方式:

代码语言:javascript
复制
    uint GetVolumeSerial(string rootPathName)
    {
        uint volumeSerialNumber = 0;
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = "/usr/sbin/ioreg";
        psi.UseShellExecute = false;
        psi.Arguments = "-p IOService -n AppleAHCIDiskDriver -r -d 1";
        psi.RedirectStandardOutput = true;
        Process p = Process.Start(psi);
        string output;
        do
        {
            output = p.StandardOutput.ReadLine();
            int idx = output.IndexOf("Serial Number");
            if (idx != -1)
            {
                int last = output.LastIndexOf('"');
                int first = output.LastIndexOf('"', last - 1);
                string tmp = output.Substring(first + 1, last - first - 1);
                volumeSerialNumber = UInt32.Parse(tmp);
                break;
            }
        } while (!p.StandardOutput.EndOfStream);
        p.WaitForExit();
        p.Close();
        return volumeSerialNumber;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9456879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档