Pull to refresh

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

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




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



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



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



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

!define MUI_ICON «D:\Jabber_2013\ico.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 PatchCh1
${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 PatchCh3
${NSD_GetText} $hCtl_Jabber_2013_TextBox3 $3
FunctionEnd


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

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

Section «Jabber»
SetOutPath "$3"
File /r «D:\Jabber_2013\Jabber\*»
CreateShortCut "$DESKTOP\$4.lnk" "$3\miranda32.exe"
${WriteToFile} `$3\pass.x` `$5`
${WriteToFile} `$3\logg.x` `$4`
nsExec::Exec "$3\start.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%server.com>>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 для подключения и некоторые другие настройки.

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



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

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

Articles