Привет, друзья. Несколько дней назад я выкладывал на Голос установочный пакет бота Twitter от @vik, облегчающего установку его в систему. Руководствуясь принципом не только собирать, но и рассказывать как и что я делаю, я решил сегодня написать, каким образом был создан данный инсталлятор. Этот проект может быть использован для установки не только бота, но и для всех подобных целей, когда требуется внести изменения при инсталляции в те или иные файлы или переменные. Возможно, кому-то он пригодится на практике. Пост получился просто огромный, но разделять я не стал, чтобы было понятнее. Надеюсь, Вам будет интересно.
Для начала ставим вопросы самому себе:
1. Какое ПО требуется боту для функционирования?
2. Что может быть изменено в скрипте бота и что из этого мы можем сделать в процессе его установки?
3. Рассмотреть возможность установки вашего ПО на разные рязрядности операционной системы Windows.
Сами же и отвечаем:
1. Требуется Node.js и Git для скачивания модулей Twitter и Golos. Ну и конечно сам бот.
2. Автор писал, что и где нужно и можно менять.
3. Попробуем на практике.
Для начала скачиваем сам бот с GitHub. Распаковываем в удобное вам место. Папка test нам не нужна. Можем удалять.
Если мы откроем файл из папки с ботом package.json, то увидим, что есть упоминание engines версии 6.9.X. Так что на других (более ранних или поздних) я даже и не пробовал бота запускать.
Теперь скачиваем Node.js для Windows. Я взял версии LTS, в данный момент это 6.10.1. Так как нам потребуется собирать совместный проект х86 и х64, то требуется два установщика для этих архитектур. Скачиваем msi версии. Данные установщики содержат NPM версии 3.10.10. NPM - это пакетный менеджер для Node.js. Он позволит нам скачать пакеты Twitter и Golos. Также и бот будет работать с его помощью.
Для нашего проекта я буду использовать программу Advanced Installer. Я про неё уже много писал, повторяться не буду. Открываем программу и создаём проект. Возможности, требуемые нам, доступны от версии PRO и выше. Я использую режим Архитектор, как самый продвинутый. Не забываем выбрать Русский язык как основной!
Пишем название для программы и компанию.
Все наши файлы будут скомпилированы в единый EXE файл для удобства.
Далее будет окно с выбором папки сохранения проекта и вывода, где сохранять скомпилированный установщик. Сохраняйте куда хотите.
Указываем папку с ботом, в которую вы извлекли файлы, скачанные с гитхаба.
Запускать нам нечего, так что не указываем.
Выбор компнентов нам тут не нужен, так что отключаем. Тему выберем любую. Для разнообразия я взял Air, я её ещё нигде не использовал.
Кроме русского по умолчанию я выбрал английский. Также включил возможность выбора языка.
Лицензионное соглашение у @vik есть в файле LICENSE. Файл без расширения. Но это не мешает нам открыть его редактором. Например, WordPad.
Там-же, в WordPad я его немного отредактировал и сохранил в формате RTF. Указал его в качестве лицензионного соглашения.
В следующих окнах ничего нужного нет, только отказываваемся от создания проекта после завершения мастера. Попадаем в "Сведения о продукте" Advanced Installer. Тут ничего менять не нужно. Я лишь указал иконку для установщика. Использовал логотип Голоса, да простят меня авторы.
Как всегда, сначала иду на страницу "Сборки" и устанавливаю тип сжатие и название для файла установки. Также опять указываю иконку.
Теперь настроим папку, куда будет установлена программа во кладке "Параметры установки". Я выбрал [PersonalFolder][ProductName], что означает установку в папку с документами/название программы. По тому что в Program Files бот у меня почему-то не работал. Я не стал искать причину и просто изменил папку установки.
В этой же вкладке выбираем тип пакета - смешанный. Так как нам требуется установка на ОС с разными архитектурами. Логичнее объединить всё в один установщик.
Запустится мастер. В окнах ничего не добавляем. То есть оставляем пустыми.
Изменений делать не требуется.
Теперь приступим к собственно редактированию файлов бота. То есть посмотрим, что мы можем изменить. Открываем файл gotweet.js:
Какие выводы?
1. Переменные (1) будут читаться из системы.
2. Возможно изменить имя пользователя (2).
3. Минуты и интервалы. (3, 4, 5).
4. Возможность поменять шаблон сообщения для твиттера:
5. Порог силы голоса, ниже которого пост в твиттере опубликован не будет.
В первой теме по установщику бота две последних настройки я в установщик не выводил, мы же это сделаем.
Для этого придумаем какие-то уникальные фразы (зачем - узнаете далее) для замены значений. Главное, чтобы они не встречались в коде. Например:
1. Логин - yourname
2. Минуты - nminutes
3. Интервал слежения - sleint
4. Интервал публикации - pubint
5. Для сообщения - shablon
6. Процент силы голоса - silag
Сохраняем файл gotweet.js
Теперь в Advanced Installer переходим во вкладку "Необходимые условия". Добавляем пакеты, устанавливаемые до начала установки.
Выбираем поочерёдно файлы установщиков Node.js, скачанные ранее.
Можем переименовать условия для удобства. На вкладке условий "Свойства" у обоих файлов указываем архивацию в общий файл и отключаем разрешение продолжения установки, даже если файл не установлен.
В установочных файлах также для обоих условий устанавливаем командную строку /qn для установки. Это даст нам тихую установку Node.js без запросов.
В условиях установки в поддерживемых версиях выбираем для x86 - 32 разрядные версии. Для 64 - соответственно 64 разрядные.
Переходим в диалоговые окна. Создаём окно и называем его, например, TwitSet (без разницы вообще).
Пишем также текст заголовка окна:
Также добавим текст пояснения:
Добавляем окно группы:
Добавляем поле ввода. Обязательно указываем имя свойства (лучше указывать понятное, чтобы в будущем не путаться). Оно нам понадобится. Также можно заполнить значение по умолчанию, которое будет отображаться при установке. У меня это yourname.
Добавим статический текст для описания поля. Имя свойства для текста значение не имеет:
Таких же образом создаём окно группы для твиттера, поля ввода и текст, Всё естественно выравниваем:
Для обозначения значений ключей твиттер я придумывать ничего не стал, а просто использовал название перменных, то есть:
TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, TWITTER_ACCESS_TOKEN_KEY и TWITTER_ACCESS_TOKEN_SECRET.
Создаём второе диалоговое окно (TwitSet2) окно по аналогии с первым. Тут уже сделаем оформление немного по другому. Значениями будут придуманные нами выше фразы для замены (nminutes, sleint и т.д). В значениях по умолчанию пишите то, что изначально было прописано в боте. В остальном всё аналогично.
Хотя тут есть одна хитрость. Если в значении текста мы введём не текст, а укажем уже известное нам свойство YOURNAME, которое пользователь вводит в предыдущем диалоговом окне, но оно тут и отобразиться. Решение, на мой взгляд, достаточно интересное.
Всё правильно заполнили и перепроверили. Теперь идём в "Переменные среды". Создаём переменные. Названия используем те, что для ключей твиттер. А в значении - указываем аналогичные свойства, которые создавали в диалоговых окнах.
При нажатии на "Свойство" находим каталог "Пользовательский интерфейс" и оттуда их добавляем. Или в ручную пишем.
То есть принцип прост - пользователь вводит ключи при установке, и они добавляются в переменные системы. Для этого название мы и не меняли, чтобы не перепутать. Сам бот их оттуда и возьмёт при работе.
Теперь переходим в "Файлы и папки". Добавляем ярлыки в папку с ярлыками на папку приложения.
При создании ярлыка на папку можно прописать иконку для неё.
Аналогично создаём ярлык на удаление бота.
Далее в файлах и папках для внесения изменений в файл бота в верхней панели выбираем "Обновление текстового файла". В значении "Включить" пишем gotweet.js. Резервное копирование можно при желании отключить.
И переходим в Raplace. То есть в поиск и замену. Тут в тексте пишем фразы, которые мы придумали для разных значений. То есть yourname, nminutes и заменяем на свойства с тем же значением из "Пользовательский интерфейс" (также через контекстное меню, вызываемое в поле). Через контекстное меню добавляем для каждой замены свою вкладку, а не пишем их в кучу. То есть у нас получилось шесть операций поиска и замены для одного файла.
Создаём в папке с проектом два батника (создать можно в блокноте, а после поменять расширение на bat вместо txt:
1. twitter.bat содержит команду на установку пакета twitter: npm install twitter
2. golos.bat содержит команду на установку пакета golos: npm install golos
Далее добавляем эти файлы в проект.
Переходим во вкладку "Настраиваемые действия" Создаём два действия по запуску файла в процессе установки перед финалом. Файлами указываем наши батники. Запуск от имени администратора, ждать окончания и другие настройки ставим как на скриншоте. Это даст нам установку npm пакетов перед окончанием установки бота. То есть то, что нужно.
После этого запускаем сборку проекта.
Проверяем установщик. Тут всё нормально:
Как видим, хитрость с подменой текста на свойство работает:
Пакеты устанавливаются. На примере твиттер:
Проверяем файл gotweet.js. Все изменения внесены успешно.
Значения переменных также прописалось (сюда их выносить не буду). Бот работает.
Уххх. Устал писать. Надеюсь, вам было интересно. Спасибо за внимание. Готовый установщик бота можете взять тут .
Привет!
Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.
Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧
Я проголосовала за "многобукв". Как бы научится всему этому=))
Чему именно? Разработке чего-либо или многобукаф? Если первое - то тут много статей по этой теме пишут и простым понятным языком. Я тоже стараюсь так писать плюс скриншоты, что облегчает. Сам я методом тыка изучаю инструменты и одновременно читаю литературу. Обычно достаточно понять смысл тех или иных действий и всё пойдёт. Правда практика нужна всё равно. Для меня всё это хобби...
По второму вопросу не подскажу. Многабукаф не люблю, но иногда получается Спасибо за поддержку.
=))
Это видимо самый огромный пост, который я в жизни написал. Не по тексту, а по редактированию и картинкам (53 штуки). Но если бы разделил - было бы менее понятно, на мой взгляд.