Уникальная идентификация компьютера с использованием .NET / Mono? - PullRequest
1 голос
/ 08 января 2010

Мне нужен способ уникальной идентификации компьютера с использованием .NET, который работает как в Windows, так и в Linux.

Методы, используемые в обеих операционных системах, не обязательно должны быть одинаковыми. То есть: у меня может быть подход для Mono, работающий на Linux, и другой подход для .NET, работающий на Windows.

Я взглянул на другой похожий вопрос о SO, и кажется, что по умолчанию для идентификации компьютера с .NET используется WMI, но будет ли это работать на машине Mono, какой бы ни была ОС?

Я открыт для предложений. Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 08 января 2010

Я нахожусь в процессе работы над одним из наших приложений на C # / .Net для Linux ... Так что я знаю, через что вам приходится искать способы обойти различия между Linux и Windows.

Теперь это очень, очень смешно, и это всего лишь черновик, который я бросил для вас. Возможно, есть лучший способ сделать это, но, возможно, это даст вам представление ...

bool IsRunningMono()
{
    // With our application, it will be used on an embedded system, and we know that
    // Windows will never be running Mono, so you may have to adjust accordingly.
    return Type.GetType("Mono.Runtime") != null;
}

string GetCPUSerial()
{
    string serial = "";

    if(IsRunningMono())
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "lshw";
        startInfo.Arguments = "-xml";
        startInfo.UseShellExecute = false;
        startInfo.RedirectStandardOutput = true;

        using(Process p = Process.Start(startInfo))
        {
            p.WaitForExit();
            System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument();

            xdoc.Load(new System.Xml.XmlTextReader(new StringReader(p.StandardOutput.ReadToEnd())));

            System.Xml.XmlNodeList nodes = xdoc.SelectNodes("node/node/node/serial");

            if (nodes.Count > 0)
            {
                serial = nodes[0].InnerText;              
            }
        }        
    }
    else
    {
       // process using wmi
    }

    return serial;
}

Я попытался загрузить его в DataSet вместо XmlDocument, но каждый раз это не удавалось. Протестировано на Ubuntu 9.10. Надеюсь, это заставит вас двигаться в правильном направлении.

1 голос
/ 08 января 2010

Будет ли работать MAC-адрес работать?

1 голос
/ 08 января 2010

Нет, WMI не будет работать на Mono.

...