Инсталлятор Miranda для корпоративного Jabber’a на NSIS

в 14:21, , рубрики: install, jabber, miranda, NSIS, ненормальное программирование, системное администрирование, метки: , , ,

Доброго времени суток! Наверное многим приходилось собирать небольшие устанощики разнообразного ПО для своих нужд или нужд компании работодателя. В моей работе приходится сталкиваться с самыми разнообразными задачами по написанию всякого мелкого админского ПО. Начиная от скриптов настройки файрволов и установшика службы VNC до инсталлятора корпоративного мессенджера на основе Miranda. На последнем мы сегодня и остановимся. Реализовав ввод логина и пароля прямиком в установщике, посредством вызова «Page custom» и работы с функционалом NSD

Инсталлятор Miranda для корпоративного Jabbera на NSIS

И так. Наша задача заключается в создании инсталлятора с вводом логина и пароля во время установки. Для формирования интерфейса будем использовать NSISDialogDesigner. Очень рекомендую данное ПО для упрощения создания своих страничек в установщике. Программа совершенно бесплатная и имеет большой набор функционала. Слева набор элементов управления, справа свойства элементов и самого окна, снизу готовый код для вставки в NSIS, он формируется в реальном времени.

Инсталлятор Miranda для корпоративного Jabbera на NSIS

Вам упростит жизнь указание выполнения нужных функций прямо в NSISDialogDesigner. Это будет полезно для создания более сложных интерфейсов в несколько страниц. Т.к. копаться в этом коде уже в NSIS достаточно нудно.

Инсталлятор Miranda для корпоративного Jabbera на NSIS

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

Инсталлятор Miranda для корпоративного Jabbera на NSIS

Далее вставляем сформированный код в проект NSIS. И вписываем свою страницу в список. У меня описание элементов MUI в данном случае выглядит примерно так. Полный файл nsi вы найдёте в конце записи.

!define MUI_ICON «D:Jabber_2013ico.ico»
!insertmacro MUI_LANGUAGE «Russian»
Page custom fnc_Jabber_2013_Show
!insertmacro MUI_PAGE_INSTFILES

Далее нам предстоит организовать работу с переменными интерфейса. Сразу вам говорю, что просто так из hCtl_Jabber_2013_TextBox1 у вас не выйдет получить набранный внутри текст. Для этого нам нужно использовать ${NSD_GetText} $hCtl_Jabber_2013_TextBox1 $0 Командой ${NSD_SetText} $hCtl_Jabber_2013_TextBox1 $0 мы наоборот можем отправить свою переменную внутрь TextBox1. При помощи NSD вы можете использовать и другие параметры элементов, например видимость или стиль/цвет.

Далее напишем функции обработки изменений внутри наших TextBox. У меня они выглядят так.

Function PatchCh
${NSD_GetText} $hCtl_Jabber_2013_TextBox1 $4
${NSD_SetText} $hCtl_Jabber_2013_TextBox3 C:Jabber_$4
${NSD_GetText} $hCtl_Jabber_2013_TextBox2 $5
${NSD_GetText} $hCtl_Jabber_2013_TextBox3 $3
FunctionEnd

Function PatchCh2
${NSD_GetText} $hCtl_Jabber_2013_TextBox2 $5
FunctionEnd

Function PatchCh2
${NSD_GetText} $hCtl_Jabber_2013_TextBox3 $3
FunctionEnd

Как видите, исходя из логина будет автоматически меняться и путь установки. PatchCh2 и PatchCh3 нужны для получения переменных пароля и самого пути установки.

Далее у нас идёт секция установки.

Section «Jabber»
SetOutPath "$3"
File /r «D:Jabber_2013Jabber*»
CreateShortCut "$DESKTOP$4.lnk" "$3miranda32.exe"
${WriteToFile} `$3pass.x` `$5`
${WriteToFile} `$3logg.x` `$4`
nsExec::Exec "$3start.bat"
SectionEnd

Для генерации autoexec.ini и записи в него пароля и логина я использую скрипт под sed. Его прилагаю вместе с исходником. Если кто-то сможет предложить более изящный способ, буду очень благодарен. Т.к. сейчас это выглядит так:

start.bat содержит

Set /p logg=<logg.x
sed -rf too.sed pass.x > pass_clear.x
echo [JABBER]>autoexec.ini
echo LoginName=s%logg%>>autoexec.ini
echo jid=s%logg%@cs.betcity.ru>>autoexec.ini
sed -f dop.sed pass_clear.x >> autoexec.ini

too.sed содержит магическое заклинание:

y/`0123456789-=\qwertyuiop[]asdfghjkl;'zxcvbnm,./ ~!@#$%^&*()_+|QWERTYUIOP{}ASDFGHJKL:«ZXCVBNM<>?/e56789:;<=>2Bav|jwy~zntu`bfxiklmopq@,}h{gsr134%ѓ&E()*c+/-.d0ЃV\JWY^ZNTUЂ‚FXIKLMOPQ?'_]H[GSRACD/

Обьясню, autoexec.ini — это файл автоматической настройки Miranda. В нём вы можете указать логин (в открытом виде), пароль (в зашифрованном виде), jid для подключения и некоторые другие настройки.

В итоге получаем нечто вот такое:

Инсталлятор Miranda для корпоративного Jabbera на NSIS

Файлы проекта

Надеюсь, кому-то эта запись пригодится. Спасибо!

Автор: PlazmX

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js