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

от автора

Доброго времени суток! Наверное многим приходилось собирать небольшие устанощики разнообразного ПО для своих нужд или нужд компании работодателя. В моей работе приходится сталкиваться с самыми разнообразными задачами по написанию всякого мелкого админского ПО. Начиная от скриптов настройки файрволов и установшика службы 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 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_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%@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 для подключения и некоторые другие настройки.

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

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

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

ссылка на оригинал статьи http://habrahabr.ru/post/131231/


Комментарии

Один комментарий на ««Инсталлятор Miranda для корпоративного Jabber’a на NSIS»»

  1. Аватар пользователя Александр
    Александр

    — Как раз настраиваю миранду в качестве Jabber клиента
    И пока не нашел как шифруется пароль при передаче в .ini файле

    sed -f dop.sed pass_clear.x >> autoexec.ini
    Не находит dop.sed

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *