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

goodoker

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

Постоянно разные.
 
Последнее редактирование:

Ashoot

Создатель
Регистрация
2 Май 2014
Сообщения
19
Реакции
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

Постоялец
Регистрация
7 Окт 2012
Сообщения
120
Реакции
53
Не удалось найти имя типа или пространства имен "PropertyData" (пропущена директива using или ссылка на сборку?)
 

Eav

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

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;
}
}
}
 

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;
}
}
}
 

vindoo

Постоялец
Регистрация
19 Июн 2014
Сообщения
43
Реакции
20
Можно 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());
}
 
Сверху