Я собираюсь реализовать очень простую опцию лицензирования для своего приложения. Порядковый номер можно предоставить на машину (или на операционную систему) или в расчете на пользователя (что касается CAL в Windows Server: если мое приложение используется несколькими пользователями на одной машине или если это используется одним пользователем на нескольких машинах).
Для лицензирования на операционную систему я использую SerialNumber Win32_OperatingSystem.
Для лицензирования в расчете на пользователя я использую:
WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
if (currentIdentity != null)
{
SecurityIdentifier userSid = currentIdentity.User.AccountDomainSid;
Console.WriteLine(userSid);
}
Хеш полученного порядкового номера ОС или SID затем хранится в базе данных, связанной с последовательным приложением; каждый раз, когда программа запускается, она запрашивает сервер, отправляя хеш ОС SN/SID и последовательное приложение.
Действительно ли это - правильный поступок это или является этим полностью неправильно? Это будет работать над каждой машиной Windows? (Например, использование последовательной материнской платы является неправильным),
Я не вижу ничего плохого в вашем подходе, поскольку я видел, что аналогичный подход используется на работе - однако мы используем комбинацию серийного номера ОС и идентификаторов оборудования для лицензирования машин. В наших приложениях нет лицензирования на каждого пользователя, поэтому я не могу ничего посоветовать по этому поводу.
Обратите внимание, что вы не должны предполагать, что значения, возвращаемые WMI, имеют какой-либо конкретный формат ( Win32_OperatingSystem должно быть в порядке, идентификаторы оборудования не всегда в порядке)
Я обнаружил ошибки, когда код, принимающий идентификаторы оборудования, принимает определенный формат и не учитывает наличие не буквенно-цифровых символов, таких как запятые и пробелы.