Лицензирование приложений .NET для компьютеров / пользователей - PullRequest
9 голосов
/ 28 апреля 2010

Я собираюсь реализовать базовую функцию лицензирования для моего приложения. Серийный номер может быть предоставлен для каждой машины (или для каждой операционной системы) или для каждого пользователя (как для CAL в Windows Server: если мое приложение используется несколькими пользователями на одной машине или если оно используется одним пользователем на нескольких машины).

  1. Для лицензирования каждой операционной системы я использую SerialNumber из Win32_OperatingSystem .

  2. Для лицензирования на пользователя я использую:

    WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
    if (currentIdentity != null)
    {
        SecurityIdentifier userSid = currentIdentity.User.AccountDomainSid;
        Console.WriteLine(userSid);
    }
    

Хэш полученного серийного номера ОС или SID затем сохраняется в базе данных, связанной с серийным номером приложения; каждый раз, когда программа запускается, она запрашивает сервер, отправляя хэш ОС SN / SID и серийный номер приложения.

Правильно ли это делать или это совершенно неправильно? Будет ли это работать на каждой машине с Windows? (Например, при использовании серийной платы неправильно )

1 Ответ

3 голосов
/ 29 апреля 2010

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

Обратите внимание, что не следует предполагать, что значения, возвращаемые WMI, имеют какой-либо определенный формат ( Win32_OperatingSystem должно быть в порядке, идентификаторы оборудования не всегда в порядке)

Я сталкивался с ошибками, когда код, принимающий аппаратные идентификаторы, принимал определенный формат и не учитывал наличие не буквенно-цифровых символов, таких как запятые и пробелы.

...