Привет всем моим подписчикам и читателям. На связи @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