Ответ 1
В С# вы можете использовать класс лицензирования, поставляемый Microsoft. Образец доступен по ссылке.
В принципе вы создаете класс, наследующий от LicenseProvider, и введите
[LicenseProvider(typeof(MyControlLicenseProvider))]
как атрибут вашего класса, который вы хотели бы получить. В вашей реализации (MyControlLicenseProvider
) вы можете запрограммировать соответствующие методы для проверки лицензии на ваши нужды, а затем выполнить кодовый вызов
License license = LicenseManager.Validate(typeof(MyControl), this);
Если лицензия не является нулевой, ваше приложение/элемент управления лицензируется.
Как утверждает сэр Грайстар, ни одна система не является безупречной, и кто-то с необходимыми навыками мог бы сконструировать себя вокруг вашей проверки. Не тратьте слишком много часов на выполнение каменной жесткой системы, но не делайте это легко обойти.: -)
Используя хеш, например SHA или одну из MD-хэш-функций, и загрузите их, некоторые ключевые данные могут быть использованы для создания простой проверки правильности. Ваш метод проверки может сделать что-то вроде
public override License GetLicense(LicenseContext context,
Type type,
object instance,
bool allowExceptions)
if (context.UsageMode == LicenseUsageMode.Designtime) {
// Creating a special DesigntimeLicense will able you to design your
// control without breaking Visual Studio in the process
return new DesigntimeLicense();
}
byte[] existingSerialKey = getExistingSerial();
// Algorithm can be SHA1CryptoServiceProvider for instance
byte[] data = HashAlgorithm.Create().ComputeHash(
username,
dateRequested,
validUntilDate,
// any other data you would like to validate
);
// todo: also check if licensing period is over here. ;-)
for (int l = 0; l < existingSerialKey.Length; ++l) {
if (existingSerialKey[i] != data[i]) {
if (allowExceptions){
throw new LicenseException(type, instance, "License is invalid");
}
return null;
}
}
// RuntimeLicense can be anything inheriting from License
return new RuntimeLicense();
}
Этот метод возвращает пользовательский License, который, например, имеет свойства относительно лицензирования, такие как DateTime на время завершения лицензирования. Настройка этого процесса не должна длиться долго, она хорошо работает как с WinForms, так и на сайтах ASP.NET, и будет препятствовать (без каких-либо гарантий) простой попытке разорвать ваше лицензирование.