Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Уникальный ID компьютера


Автор: Gnusss 13.6.2011, 10:07
Привет всем.

Появилась проблема с определением уникального для каждого компьютера HardwareID, необходимо для отслеживания установок программы у пользователей.
В начале пробовал через, CpuID определять, было что-то типа этого:
Код

type
  TCPUID = array[1..4] Of Longint;

function GetCPUID: TCPUID; assembler; register;
asm
  PUSH    EBX
  PUSH    EDI
  MOV     EDI,EAX
  MOV     EAX,1
  DW      $A20F
  STOSD
  MOV     EAX,EBX
  STOSD
  MOV     EAX,ECX
  STOSD
  MOV     EAX,EDX
  STOSD
  POP     EDI
  POP     EBX
end;
...
fID:= CPUID[1] + CPUID[2] + CPUID[3] + CPUID[4];

Но оно начало выдавать одинаковые ID уже на совсем маленьком (больше 6-ти) количестве пользователей.
Дальше попробовал использовать TDiskDriveInfo (Component Version 1.1 - Suite GLib )
Код

var
  DDI: TDiskDriveInfo;
begin
  SN^:= '';
  DDI:= TDiskDriveInfo.Create(nil);
  try
    DDI.Active:= True;
    SN^:= DDI.DiskDriveProperties.SerialNumber;
  finally
    DDI.Free();
  end;

К сожалению оно тоже выдаёт одинаковые ID.

Собственно вопрос, если ли хоть какой-то способ точно генерировать уникальный HardwareID чтобы в независимости от пере-установок Windows он был одинаковы?

Автор: ZBugz 13.6.2011, 10:32
Самое простое, это сложи CPUid и HDDid, уже меньше вероятность будет smile 

Автор: Akella 13.6.2011, 12:54
МАС адрес по идее уникальный.
Но его можно ручками в винде поменять, если знать как.

Добавлено @ 12:54
Но если пользователь установит в одной локальной сети одинаковые MAC-адреса для разных компьютеров, то сеть работать не будет.

Автор: Gnusss 13.6.2011, 16:04
@ZBugz, да но все же хотелось бы нормального варианта. Вероятность повторений все ровно довольно большая.

@Akella, а MAC адресом это вариант, но что делать если в системе несколько сетевых адаптеров (еще виртуальные например). Ну и плюс что что поменять можно не айс совсем.

Автор: Akella 13.6.2011, 19:19
Цитата(Gnusss @  13.6.2011,  16:04 Найти цитируемый пост)
@Akella, а MAC адресом это вариант, но что делать если в системе несколько сетевых адаптеров (еще виртуальные например). Ну и плюс что что поменять можно не айс совсем. 

складывай или бери первый попавшийся

Добавлено через 24 секунды
думаю, что можно как-то определить тип сетевого адаптера: физический или виртуальный

Автор: kami 13.6.2011, 22:05
Цитата(Gnusss @  13.6.2011,  10:07 Найти цитируемый пост)
Но оно начало выдавать одинаковые ID уже на совсем маленьком (больше 6-ти) количестве пользователей.

Потому что плюсовать не надо. 1+2+1+1 = 0+3+2+0, хотя ID разные. Надо переводить в Hex-строку с фиксированным количеством символов и складывать уже строки.

Цитата(Gnusss @  13.6.2011,  10:07 Найти цитируемый пост)
TDiskDriveInfo

Пытался как-то использовать что-то подобное. На первом же компьютере с raid-0 программа зависла. Отказался от этого.

Цитата(Gnusss @  13.6.2011,  10:07 Найти цитируемый пост)
если ли хоть какой-то способ точно генерировать уникальный HardwareID чтобы в независимости от пере-установок Windows он был одинаковы

Нет такого. Потому что все железки в компьютере - переменные величины. Например, я поменял CPU на более мощный/такой же, потому что старый сгорел; добавил памяти, доставил/заменил винчестер... Кроме того, Вашу программу можно запустить на VirtualBox|VMWare - а там вообще ни одной "реальной" железки нет.

Цитата(Akella @  13.6.2011,  19:19 Найти цитируемый пост)
думаю, что можно как-то определить тип сетевого адаптера: физический или виртуальный

Думаю, нельзя (хотя, могу ошибаться) - любая программа пользовательского режима взаимодействует с железкой через драйвер. И если последний грамотно написан, то отличить не получится.

Автор: Gnusss 13.6.2011, 22:30
Цитата(kami @  13.6.2011,  22:05 Найти цитируемый пост)
Потому что плюсовать не надо. 1+2+1+1 = 0+3+2+0, хотя ID разные. Надо переводить в Hex-строку с фиксированным количеством символов и складывать уже строки.

Хм... действительно, это интересный вариант. Не знаешь все-таки насколько CpuID будет уникальный?
Цитата(kami @  13.6.2011,  22:05 Найти цитируемый пост)
Пытался как-то использовать что-то подобное. На первом же компьютере с raid-0 программа зависла. Отказался от этого.

Оно еще и требует чтобы какой-то там сервис в системе был включен, а некоторые его отключают типа ради быстродействия.
Цитата(kami @  13.6.2011,  22:05 Найти цитируемый пост)
Нет такого. Потому что все железки в компьютере - переменные величины. Например, я поменял CPU на более мощный/такой же, потому что старый сгорел; добавил памяти, доставил/заменил винчестер... Кроме того, Вашу программу можно запустить на VirtualBox|VMWare - а там вообще ни одной "реальной" железки нет.

Ну мне то в принципе не важно это, навряд ли кто-то будет запускать эту программу на виртуалке.
Мне нужен уникальный ID только для подсчета уникальных пользователей и сбора прочей статистики.
А замена CPU разве не повлечет за собой пере-установку системы и прочие радости, так что это будет уже другой комп.

Автор: northener 14.6.2011, 01:04
Цитата(Gnusss @  13.6.2011,  22:30 Найти цитируемый пост)
Мне нужен уникальный ID только для подсчета уникальных пользователей и сбора прочей статистики.

А вот это уже интересно. Зачем "сбор статистики" производить незаметно для пользователя?

Автор: Gnusss 14.6.2011, 06:15
@northener, а кто сказал что не заметно? Пользователи знают что статистика собирается, об этом написано раз - в лицензионном соглашении (которое они 100% увидят при первом запуске) и два - при первоначальной настройке когда пользователь вводит свое имя (которое тоже идет в статистику).

Автор: Vas 14.6.2011, 08:19
Цитата(Gnusss @  14.6.2011,  06:15 Найти цитируемый пост)
в лицензионном соглашении (которое они 100% увидят при первом запуске)

По статистике, на чтение лицензионного соглашения в России уходит не более 3 секунд 

Автор: Gnusss 14.6.2011, 10:29
Цитата(Vas @  14.6.2011,  08:19 Найти цитируемый пост)
По статистике, на чтение лицензионного соглашения в России уходит не более 3 секунд 

Ну это как бы, уже не мои проблемы. И кстати, по статистике только 46% пользователей моей программы проживают в России.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)