Определить серийный номер жесткого диска в моно? - PullRequest
1 голос
/ 27 февраля 2012

Я разрабатываю библиотеку на C #, которая генерирует уникальный идентификатор оборудования с использованием этих 3 переменных

  1. Имя машины
  2. MAC-адрес
  3. Серийный номер жесткого диска

Я могу получить имя компьютера и MAC-адрес в .NET и Mono, но я могу получить только серийный номер жесткого диска в .NET.Кто-нибудь знает, есть ли какой-нибудь возможный способ получить серийный номер жесткого диска в моно, или я должен просто использовать другую переменную (например: имя процессора, идентификатор материнской платы и т. Д.)?

Ответы [ 2 ]

1 голос
/ 17 августа 2017

Вы можете получить его также с разрешения пользователя с помощью ioreg

из скорлупы:

ioreg -p IOService -n AppleAHCIDiskDriver -r | grep \ "Серийный номер \" | awk '{print $ NF;}'

программно:

    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 голос
/ 27 февраля 2012

Согласно этой документации :

Mac OS X не поддерживает получение серийного номера жесткого диска из приложения уровня пользователя

Если требование наличия root на mac не является для вас проблемой (или вы пропускаете версию для mac), у меня есть один грубый способ решения проблемы:

Используя эту статью или этот вопрос, который вы можете определить:

  1. Вы используете Mono или .NET
  2. На какой платформе вы находитесь

Если вы знаете, что находитесь в системе LINUX, вы можете получить серию жесткого диска через , запустив такую ​​ системную команду :

/sbin/udevadm info --query=property --name=sda

На Mac вы можете использовать Disk Utility (как root), чтобы получить жесткий диск с последовательным интерфейсом. На окнах вы можете использовать стандартный подход.

...