Получить уникальный идентификатор компьютера c#

Тема в разделе ".NET", создана пользователем goodoker, 28 авг 2014.

  1. goodoker

    goodoker Постоялец

    Регистр.:
    7 окт 2012
    Сообщения:
    117
    Симпатии:
    49
    Гуглил, но что-то всё нерабочее или же я криворукий.
    Находил некоторые варианты, но постоянно разные значения выдаёт.
    Например:
    Код:
    Console.WriteLine(Guid.NewGuid().ToString());
    Постоянно разные.
     
    Последнее редактирование: 28 авг 2014
  2. Ashoot

    Ashoot Создатель

    Регистр.:
    2 май 2014
    Сообщения:
    10
    Симпатии:
    5
    Код:
    using System.Management;
    using System.Text;
    
    namespace Common
    {
        public static class Workstation
        {
            public static string GenerateWorkstationId()
            {
                ManagementObjectSearcher _searcher = new ManagementObjectSearcher();
                StringBuilder _value = new StringBuilder();
    
                /* processors */
                _searcher.Query = new ObjectQuery("select * from Win32_Processor");
                foreach (ManagementObject _object in _searcher.Get())
                {
                    _value.Append(ManagmentObjectPropertyData(_object.Properties["ProcessorId"]));
                    _value.Append(',');
                }
                /* baseboard */
                _searcher.Query = new ObjectQuery("select * from Win32_BaseBoard");
                foreach (ManagementObject _object in _searcher.Get())
                {
                    _value.Append(ManagmentObjectPropertyData(_object.Properties["Product"]));
                    _value.Append(',');
                }
    
                return CryptoHelper.CalculateMD5Hash(_value.ToString());
            }
    
            private static string ManagmentObjectPropertyData(PropertyData data)
            {
                string _result = string.Empty;
                if (data.Value != null && !string.IsNullOrEmpty(data.Value.ToString()))
                {
                    switch (data.Value.GetType().ToString())
                    {
                        case "System.String[]":
                            string[] _str = (string[])data.Value;
                            foreach (string _st in _str)
                                _result += _st + " ";
                            break;
                        case "System.UInt16[]":
                            ushort[] _shortData = (ushort[])data.Value;
                            foreach (ushort _st in _shortData)
                                _result += _st + " ";
                            break;
                        default:
                            _result = data.Value.ToString();
                            break;
                    }
                }
                return _result;
            }
        }
    }
    
     
    goodoker нравится это.
  3. goodoker

    goodoker Постоялец

    Регистр.:
    7 окт 2012
    Сообщения:
    117
    Симпатии:
    49
    Не удалось найти имя типа или пространства имен "PropertyData" (пропущена директива using или ссылка на сборку?)
     
  4. Ashoot

    Ashoot Создатель

    Регистр.:
    2 май 2014
    Сообщения:
    10
    Симпатии:
    5
    goodoker нравится это.
  5. goodoker

    goodoker Постоялец

    Регистр.:
    7 окт 2012
    Сообщения:
    117
    Симпатии:
    49
  6. ofolfa

    ofolfa Создатель

    Регистр.:
    15 авг 2008
    Сообщения:
    27
    Симпатии:
    7
  7. Eav

    Eav Писатель

    Регистр.:
    4 окт 2014
    Сообщения:
    3
    Симпатии:
    1
    В зависимости от применения, я бы рассмотрел вариант получения нескольких уникальных параметров. hdd, процессора, сетевой карты и т.д. И хранил как минимум 2, можно хэшированных. В случае смены части оборудования, пользователя по прежнему можно будет идентифицировать.
     
  8. vasja1111

    vasja1111 Писатель

    Регистр.:
    11 дек 2014
    Сообщения:
    5
    Симпатии:
    0
    ничо не пойму
    switch (data.Value.GetType().ToString())
    {
    case "System.String[]":
    string[] _str = (string[])data.Value;
    foreach (string _st in _str)
    _result += _st + " ";
    break;
    case "System.UInt16[]":
    ushort[] _shortData = (ushort[])data.Value;
    foreach (ushort _st in _shortData)
    _result += _st + " ";
    break;
    default:
    _result = data.Value.ToString();
    break;
    }
    }
    return _result;
    }
    }
    }
     
  9. vasja1111

    vasja1111 Писатель

    Регистр.:
    11 дек 2014
    Сообщения:
    5
    Симпатии:
    0
    ничо не пойму
    switch (data.Value.GetType().ToString())
    {
    case "System.String[]":
    string[] _str = (string[])data.Value;
    foreach (string _st in _str)
    _result += _st + " ";
    break;
    case "System.UInt16[]":
    ushort[] _shortData = (ushort[])data.Value;
    foreach (ushort _st in _shortData)
    _result += _st + " ";
    break;
    default:
    _result = data.Value.ToString();
    break;
    }
    }
    return _result;
    }
    }
    }
     
  10. vindoo

    vindoo Создатель

    Регистр.:
    19 июн 2014
    Сообщения:
    38
    Симпатии:
    19
    Можно ID процессора брать.
    Код:
    System.Management.ManagementClass theClass = new System.Management.ManagementClass("Win32_Processor");
    System.Management.ManagementObjectCollection theCollectionOfResults = theClass.GetInstances();
    foreach(System.Management.ManagementObject currentResult in theCollectionOfResults)
    {
       MessageBox.Show(currentResult["ProcessorID"].ToString());
    }