Доброго времени суток! Наверное многим приходилось собирать небольшие устанощики разнообразного ПО для своих нужд или нужд компании работодателя. В моей работе приходится сталкиваться с самыми разнообразными задачами по написанию всякого мелкого админского ПО. Начиная от скриптов настройки файрволов и установшика службы VNC до инсталлятора корпоративного мессенджера на основе Miranda. На последнем мы сегодня и остановимся. Реализовав ввод логина и пароля прямиком в установщике, посредством вызова «Page custom» и работы с функционалом NSD
И так. Наша задача заключается в создании инсталлятора с вводом логина и пароля во время установки. Для формирования интерфейса будем использовать NSISDialogDesigner. Очень рекомендую данное ПО для упрощения создания своих страничек в установщике. Программа совершенно бесплатная и имеет большой набор функционала. Слева набор элементов управления, справа свойства элементов и самого окна, снизу готовый код для вставки в NSIS, он формируется в реальном времени.
Вам упростит жизнь указание выполнения нужных функций прямо в NSISDialogDesigner. Это будет полезно для создания более сложных интерфейсов в несколько страниц. Т.к. копаться в этом коде уже в 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 для подключения и некоторые другие настройки.
В итоге получаем нечто вот такое:
Надеюсь, кому-то эта запись пригодится. Спасибо!
Автор: PlazmX