Разработка установщика Telegram бота на практике в Advanced Installer. Проблемы и решения.


Привет всем моим подписчикам и читателям. На связи @zaguzin. Уже больше недели я не писал в тег Образование. Исправлю это сейчас.

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

Проектирование.

Начинается всё собственно с мыслей, как и что организовать. Сразу же в голову пришёл вариант изменений конфигурации только после установки этого файла, а не создание нового.  В данном случае это поиск и замена. По аналогии с подобной разработкой. Advanced Installer не поддерживает создание js файлов. Только ini и xml, к сожалению.

В конфиге также предусмотрена возможность использовать переменные, что хранятся в системе. По умолчанию рекомендуется эти переменные использовать и для хранения приватных ключей. А почему бы не хранить все данные в переменных?

Так подумал я - и это облегчило бы мне задачу. Проконсультировался с @vik и приступил к работе....

Но это было ошибкой.

Почему?

1. Невозможно оперативно отредактировать конфиг. Например, изменить интервалы и другие настройки работы. Для этого потребовалось бы добавлять переменные в ручном режиме, что не совсем удобно для пользователя.

2. Обработка некоторых данных при вызове переменных из системы идёт неправильно. В результате приложение не работает.

Чтобы это понять, потребовалось несколько часов, тестирования и поиска ошибок. По этому переменные используются только для хранения постинг ключей. А остальное изменение данных идёт через поиск и замену в файле wp.js. Для просотра переменных в системе после установки приложения достаточно в PowerShell вызвать команду Get-ChildItem Env:

На скриншоте выше указаны только приватные постинг ключи. process.env.WPGOL_WIF1 - постинг ключ первого пользователя и process.env.WPGOL_DEFWIF - аналогично для пользователя по умолчанию.

Разработка.

Я уже много раз писал про создание проекта в Advanced Installer и добавление файлов. Повторяться в который раз не буду. В данном случае добавлены только файлы самого приложения, а также bat-ники для установки модулей Node.js.

Второй файл wp.js - это просто операция поиска и замены, не обращайте внимание на дублирующие названия. Эту операцию мы позже разберём с примерами ниже.

Bat-ники содержат в себе код установки необходимых модулей Node.js:

А также запуск cамого приложения для постинга:

Также добавил ярлыки для удаления приложения, на папку приложения и bat-ник запуска.

На вкладке "Сведения о продукте" название проекта и другие данные.

Теперь переходим в "Необходимые условия". Так как для работы требуется Node.js - добавим его также и включим в установщик. Благо размер установочных пакетов совсем небольшой. Они были скачаны с официального сайта Node.js. Для каждой архитектуры ОС они свои. На примере версии x86:

Путь к файлам и команда /qn. Она нужда для автоматической установки файла без отображения интерфейса установки, то есть в "тихом режиме".

В условиях установки выбираю только 32-разрядные версии ОС (то есть x86).

Для версии x64 всё аналогично, только другой файл-установщик и указание условий. Ничего сложного, как видите.

Теперь переходим на вкладку "Параметры установки" и указываем папку установки и ярлыков. А также запуск установочного пакета с привилегиями администратора ОС. [PersonalFolder][ProductName] - означает папку "Документы" + название программы.

В папке с проектом открываем вайл wp.js и придумываем такой текст для значения настроек, который точно не встречается в коде. Я для облегчения себе жизни просто использую цифры, например от 11111 до 77777. Это потребуется для операции поиска и замены. Для названия сайта - просто замену текста.

Также и названия для переменных, где будут храниться приватные постинг ключи. Начинаются они с process.env.+ название. Остальное как на примере выше. Имена для логинов Wodpress я оставил по умолчанию, как и были. Они также будут заменены в процессе установки. Остальное как и выше в цифрах.

Теперь в Advanced Installer переходим в "Диалоговые окна". Создадим диалог Readme и добавим туда файл описания приложения. Я взял его с поста @vik по приложению.

Добавим пустые диалоговые окна в проект. Я уже несколько раз писал про добавление оных. Повторять не буду. Иначе каждый пост будет повторением сначала старого. В первом окне используется "Поле со списком" (ComboBox), кроме обычного текста и поля ввода.

Если на поле щелкнуть пару раз мышкой, то можно добавить данные и описание. Я использовал форматы записей и их описание в Woprdpress. В результате при выборе "Ссылка" (поставил выбор по умоланию) у нас будет подставлено соответственно link. Также не забываем про название свойства - оно нам понадобится в дальнейшем. В данном случае я написал WPGOL_OTKAZ. (Главное чтобы вы потом не запутались с названиями, придумывайте интуитивно понятные значения).

Поле ввода также требует придумывание свойства и ввода значения по умолчанию. На примере имени сайта:

Остальные диалоговые кона создаются по аналогии. Зависит от количества значений и как вы организуете оформление оных. Второе окно с выбором интервалов и адресом ноды:

Третье окно с пользователями:

Четвёртое аналогично:

Все значения прописаны аналогично тем, что предлагает @vik в конфиге по умолчанию.

Теперь переходим на вкладку "Сборки" и настраиваем сжатие и вывод готового установочного пакета:

Теперь создадим в "Переменные среды". Здесь создаём переменные (которые указали в файле wp.js) для приватных постинг ключей. А в значении выбираем соответствующее свойство из тех, которые создавали в диалоговых окнах. Повторю - они находятся в "Пользовательском интерфейсе":

Итак, у нас получилось четыре переменные для хранения ключей. Если поля при установке будут не заполнены, то значения созданы не будут. Всё просто.

Теперь снова переходим в "Файлы и папки" и выбираем операцию "Обновление текстового файла". Название файла - у нас это wp.js. Все нужные настройки я, как всегда, отметил красным:

Создаём новую операцию поиска и замены:

На примере сайта заменим http://forklog.com на свойство [WPGOL_SITE] (Его, опять-же, мы создали в диалоговых окнах):

Ну или замена имени автора на блоге Wordpress:

И так делаем для всех данных, что нам требуется заменить. Думаю, логика работы вас стала вполне понятной. Сохраняем всё и переходим на вкладку "Настраиваемые действия".

Нам требуется установить модули Node.js, необходимые для запуска приложения. Это у нас делают bat-ники wordpress.bat и steеm.bat, упомянутые в начале поста. Для этого выбираем действие Launch File и добавляем его прямо перед завершением установки (Finish) - для каждого bat файла действие создаётся отдельно. Данные заполняем как на скриншоте ниже:

На этом с настройками всё. Собираем проект:

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

На сегодня у меня всё, спасибо за внимание и поддержку. До завтра.


Comments 0