Установщик с онлайн-регистрацией для приложения Windows

Мы разработали программное обеспечение на vb.net с использованием Visual Studio 2013. Теперь мы хотим создать специальный установщик со следующими шагами / функциями:

  1. Пользователь Start для установки нашего программного обеспечения.
  2. При выборе "Ввести серийный ключ" пользователь вводит 16-значный серийный номер, который мы предоставили.
  3. При нажатии кнопки "ОК" наше программное обеспечение подключается к нашему IP-адресу и сохраняет серийный ключ с информацией другого пользователя в нашей базе данных.
  4. Ключ подтверждения возвращается обратно в наше программное обеспечение.
  5. Программное обеспечение записывает файл и сохраняет его в системную папку.

Это почти как процесс регистрации в Adobe или Corel. Мы открыты и для других методов, которые должны гарантировать, что наше программное обеспечение должно быть установлено только на одном компьютере. Обратите внимание, что мы группа начинающих программистов (не очень продвинутый уровень), поэтому; если процесс будет разработан, это будет очень полезно для нас.

3 ответа

Я бы удалил все лицензионные функции из установки и добавил их в приложение. Ваша установка все еще может записать лицензию на диск или в реестр, передав ее в msiexec.exe как открытое свойство - свойства UPPERCASE (или вы можете "спрятать" вещи немного больше, используя преобразование для применения свойства serial - оно имеет точно такой же эффект, как установка свойства в командной строке). Вы также можете установить свойство LICENSE из диалогового окна в настройке, когда оно запускается в интерактивном режиме, но мой любимый подход - разрешить добавление лицензионного ключа без проверки в реестр в режиме без вывода сообщений и вместо этого ввести лицензионный ключ непосредственно в приложении. а не настройка для интерактивных развертываний (приведенное выше описание предназначено для скрытого развертывания):

msiexec.exe /I "C:\Install.msi" /QN /L*V "C:\msilog.log" LICENSE="123-456-789"
  • Это позволит легко добавить лицензию на каждый компьютер в сценарии корпоративного развертывания. Значение лицензии просто записывается на диск или в реестр без проверки. Приложение проверит это (более безопасно, чем dll проверки в настройке).
  • Нет необходимости связываться с какими-либо сложными диалоговыми окнами установки, но вам понадобится лицензионный диалог в вашем приложении, как описано ниже.
  • Как разработчику установки, вы должны предложить помочь реализовать функцию в приложении, а не в настройке, чтобы это не выглядело как " перекладывание денег ". Это все для общей надежности программного обеспечения и защиты от дурака - и несколько причин перечислены ниже.
  • Почти все крупные корпорации развертывают файлы MSI без вывода сообщений, поэтому графический интерфейс настройки будет игнорироваться в большинстве случаев. Затем вы просто добавляете риск и тратите ресурсы, если имеете дело с лицензиями в настройке.
  • Один недостаток: приложение, запущенное как пользователь без прав администратора после установки, не может записать в HKLM для совместного использования последовательного порта для всех пользователей на компьютере (установка, запущенная с повышенными правами, может). Он должен либо выполнить запись в HKCU, либо программа установки должна иметь подготовленный доступ для записи в определенное расположение HKLM в реестре, чтобы приложение могло выполнить запись. Я предпочитаю писать в HKCU для каждого пользователя, поскольку лицензия в таком случае становится менее доступной для копирования другими пользователями и хранится в виде пользовательских данных (допускает роуминг, хотя большинство ИТ-специалистов это ненавидит). Однако лицензионный ключ HKLM, написанный приложением или программой установки во время установки (как описано выше с набором открытых свойств), позволяет всем пользователям совместно использовать лицензию при запуске приложения.

Есть несколько более конкретных причин, чтобы не допускать обработки и проверки лицензии в вашей конфигурации:

  • Значительное количество запросов в службу поддержки всегда возникает из-за проблем с регистрацией их лицензионных ключей в настройке. Настройка запускается один раз, приложение может быть запущено снова, если есть проблемы. Это важнее, чем вы думаете, для неопытных пользователей. У вас также есть улучшенные функции для обработки исключений и состояний ошибок и любых непредвиденных проблем, которые могут возникнуть в приложении.
  • Последовательная проверка в настройке выставляет проверочный dll / метод, который легко взломается пиратами. Вы не предотвратите пиратство, исключив его из своих настроек, но, по крайней мере, сделаете его более сложным. Это более безопасно в приложении, если вы немного скрываете вещи (статическое связывание, шифрование, запутывание, перевод процесса проверки в оперативный режим и / или все, что делается профессионалами в области безопасности, с которыми я не знаком).
  • Разрешить пробную версию приложения: если для установки требуется поддержка пробной версии приложения, вы должны разрешить пользователю вводить лицензионный ключ, если он в конечном итоге приобретает продукт - предпочтительно без необходимости повторного запуска установки или просто удалить / переустановить добавить лицензионный ключ. Другими словами, вам, вероятно, все равно придется иметь дело с лицензированием в вашем приложении, зачем также усложнять настройку? Больше риска, больше QA, больше потенциальных запросов поддержки и многократных исправлений как в установке, так и в приложении. Высокая общая стоимость?
  • Если ваше приложение работает с разными версиями, что если пользователь купит обновленную лицензию? Они должны просто иметь возможность ввести его в диалоговое окно лицензии и, если возможно, разблокировать функции, а не удалять и переустанавливать все связанные с этим блокировки. Для некоторых обновлений это трудно достичь, и вы часто получаете отдельные настройки для разных выпусков.
  • Если в сети используется прокси-сервер для доступа к Интернету, у вас будут проблемы с регистрацией лицензии через Интернет во время настройки (часто запрашивается маркетингом). У вас есть больше возможностей для проверки и решения этой проблемы в приложении - оно может попробовать еще раз и дождаться доступа (обычно вы подключаетесь к IE для автоматической настройки прокси-сервера, если это возможно). Для корпоративного развертывания вам также нужна опция автоматической установки, которая не проверяет ключ, а просто записывает его в реестр. Попытка получить доступ к Интернету с помощью автоматической установки MSI, на мой взгляд, является весьма экстремальным анти-паттерном развертывания. Я нахожу это сомнительным в настройке GUI также. Выполните регистрацию в приложении - гораздо менее спорным, и вы можете настроить правила брандмауэра, чтобы разрешить ему доступ к сети Интернет (msiexec.exe, скорее всего, блокируется - и по уважительной причине). Также могут существовать аппаратные брандмауэры и / или программное обеспечение для обеспечения безопасности, которое затрудняет или даже делает невозможным доступ в Интернет без какой-либо неуклюжей конфигурации административного сервера. Это может убить ваше программное обеспечение, учитывая мой опыт: " Просто уберите это из нашей сети и приложений - должны быть лучшие варианты - слишком неуклюжие и подверженные ошибкам ".
    • ОБНОВЛЕНИЕ: По мере того, как технология развертывания развивается и становится все более "основанной на Интернете", эта "истина" может измениться, и мы можем в конечном итоге сделать все "онлайн" с развертыванием, специально разработанным для запуска, например, через онлайн-хранилища. Придется подождать и посмотреть. На данный момент мое мнение таково, что любые требования к настройке доступа в Интернет ошибочны и нежелательны.
  • Установки, которые мешают лицензированию, могут иногда приводить к удалению данных лицензии во время обновлений, исправлений и сценариев миграции из-за ошибок в настройке. Временами это намного серьезнее, чем вы думаете - пакет может поразить тысячи рабочих станций в крупных компаниях и будет трудоемким для исправления.
    • В самой технологии MSI есть довольно плохой " антишаблон ", при котором самовосстановление или восстановление, инициируемое вручную, сбрасывает значения в реестре, которые были изменены приложением. Это может стереть лицензионные ключи. Мы видим это все время, и это вина технологии. Это просто не логично в этой области.
    • Для этого есть некоторые исправления (или, скорее, обходные пути) (используйте постоянный компонент, пишите лицензию из пользовательского действия, а не из компонента и т. Д.), Но я нахожу их довольно неуклюжими, и у вас должен быть большой опыт знать все подводные камни - и даже опытные пользователи испортят это.
  • Лицензирование - это огромная корпоративная головная боль - часто компания или корпорация желает, чтобы лицензирование осуществлялось централизованно на сервере, а не на основе текстовых серийных номеров вообще (например, одновременные или плавающие лицензии, полученные при запуске приложения через сеть)., Просто упомянуть об этом, хотя это как бы выходит за рамки вопроса. В этих случаях при установке обычно указывается IP-адрес, указывающий на сервер лицензий, или обычное имя хоста, которое должно разрешаться WINS или DNS.

Как вы, возможно, уже догадались, установщик Windows не предоставляет никакой встроенной функции для управления лицензированием. Но есть коммерческие решения по лицензированию, к которым вы можете обратиться, если они доступны.

  1. LogicNP
  2. DESAWARE

Поскольку это очень широкий вопрос, трудно объяснить детали реализации низкого уровня. Я могу дать вам направление.

Прежде всего вам понадобится пользовательский интерфейс, в котором пользователь может ввести ключ лицензии / активации. Есть способы включить пользовательский интерфейс в установщик Windows, я уже объяснил несколько подходов в SO, обратитесь к следующим потокам.

Следуя приведенным выше подходам, вы сможете добавить пользовательский интерфейс, где пользователь будет вводить ключ. После того, как пользователь добавил ключ, он нажимает кнопку "Активировать" в пользовательском интерфейсе, обработчик событий нажатия кнопки вызова вызовет необходимую логику для вставки / проверки ключа активации, введенного пользователем.

Возможно, вы можете попробовать Inno Setup, которая является бесплатной (даже с открытым исходным кодом) установочной системой.

Это сценарий, который позволяет вам настроить ваш установщик и выполнить все!

Создать пользовательскую страницу с вводом серийного номера действительно легко, см. Этот пример: CustomPage для серийного номера в Inno Setup

и есть также интеграция для Visual Studio.

Другие вопросы по тегам