Как и многие современные компании-разработчики программного обеспечения, моя компания использует ключи продукта, чтобы проверить, какой у пользователя контракт на часть программного обеспечения. При анализе ключа продукта я могу проверить, какой тип продукта у кого-то есть (пробная/полная версия и т. д.). Мы хотим, чтобы пользователи могли переходить с бесплатных версий на платные версии библиотеки кода, а также хотим, чтобы пробные версии проверяли, действителен ли ключ продукта.
Пробная версия не включает весь код полной версии. Ключи продукта проверяются с помощью алгоритма (он не использует веб-сервисы или что-то в этом роде), так что это можно сделать очень быстро.
Здесь есть две подзадачи:
- Переход от пробной версии к полной. Я думаю решить эту проблему с помощью обновлений MSI, но не уверен, как этого можно достичь. (используя WIX)
- Создание пробной сборки, включающей дополнительный код для проверки того, является ли это пробной версией. Я знаю, что это возможно с помощью операторов #if, но мне интересно, возможно ли также изменить DLL, точнее: добавить статические конструкторы для каждого типа, которые проверяют пробную версию.
Мои вопросы: это правильный способ сделать это? И если да, то существуют ли стандартные способы (или инструменты) для достижения такой функциональности? И если нет, то как лучше всего это сделать?
обновить
Спасибо за все отличные ответы. Я думаю, пришло время объяснить больше контекста, исходя из ответов - к счастью, кажется, что мы более или менее на правильном пути.
Для наших продуктов имеет смысл установить его в частную (не подключенную к Интернету) VLAN, так что ключи продукта будут правильным выбором... и я действительно не хочу заморачиваться с «активацией по телефону», например Майкрософт сделал :-). Поэтому, как было предложено, в настоящее время я использую ключи продукта, которые шифруют бит данных, которые расшифровываются, чтобы проверить, действителен ли ключ для данного продукта. Конечно, я могу стать жертвой компьютерного пиратства, но я полагаю, что пока мы будем рассматривать это как «маркетинговый инструмент».
Как было предложено в одном из ответов, в настоящее время я создаю несколько файлов MSI: один для x64 и один для x86. А затем один для пробной версии, полной версии и версии для чертежей. Всего получается 6 файлов MSI (pfff). Во время обфускации процесса происходит строгое именование и подпись кода. Версия проекта включает в себя полный исходный код.
Меня больше беспокоят пробные сборки. Конечно, я могу добавить некоторые проверки здесь и там, но я бы предпочел просто автоматически ставить проверки в каждом классе... Я подумал о том, чтобы скопировать все файлы CS и добавить/изменить статические c'tors (например, используя cecil или nrefactory.. или просто пару регулярных выражений...). Просто мне кажется, что я не единственный парень, который хочет этого. Должен быть лучший способ, верно?
Далее, об обновлениях и апгрейдах думать очень не хочется, потому что это похоже на изобретение колеса MSI. Переход от пробной версии к полной версии кажется мне обновлением MSI, точно так же, как переход от полной версии к версии проекта выглядит как обновление MSI. Однако в сочетании с обычными обновлениями меня беспокоит, возможно ли это вообще?