
И так. Наша задача заключается в создании инсталлятора с вводом логина и пароля во время установки. Для формирования интерфейса будем использовать 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 для подключения и некоторые другие настройки.
В итоге получаем нечто вот такое:

Файлы проекта
Надеюсь, кому-то эта запись пригодится. Спасибо!
Комментарии (10)
yosemity
10.09.2013 15:06корпоративного мессенджера на основе Miranda
Конкретно Miranda прекрасно умеет SSO, а в корпоративной среде юзерам свойственно менять пароли. К тому же софт явно не должен ставиться с правами юзера. Кто в таком случае будет вводить пароль, SYSTEM? Если ставить в домашнюю директорию — тоже не айс, не по феншую.
Правильней было бы устанавливать миранду автоматически всем и сделать кастомный лаунчер. При запуске лаунчер проверяет существование профиля юзера, при необходимости выводит окно логина и пароля (если уж SSO не прикрутили) и когда все готово запускает экзешник миранды. Я кстати так и сделал, при чем с SSO и вообще не парюсь, где бы юзер не залогинился у него всегда автоматически стартанет миранда под его (юзера) учеткой.PlazmX Автор
10.09.2013 15:06Тут вы правы. Но не в наших условиях. Грубо говоря, у нас больше 500 удалённых узлов, на которых по 3-4 человека. Россия и ближнее зарубежье. Компьютеры там часто меняются (история не хранится кст), а люди совершенно далеки от технологий. В центральном офисе у нас всё по феншую, но не о нём речь)
Indexator
10.09.2013 15:06Приходилось мне писать хитровывернутые инсталляторы на NSIS, должен сказать — это дикий трэш и угар. Да, он обладает весьма широкими возможностями и кучей расширений, но этот его собственный язык написания скриптов, его синтаксис, логика выполнения порой взрывают мозг… Такое впечатление, что NSIS представляет из себя огромную коллекцию костылей и заплаток… А его код порой напоминает чуть ли не ассемблерный…
PlazmX Автор
10.09.2013 15:06Полностью с вами согласен. Вот… Кусок кода. Я долго разбирал написанное…
; StrCpy $input «084069083084»
; StrCpy $counter 0
; StrCpy $output ""
; StrCpy $subdigits $input 3 $counter
; _loop:
; StrCpy $firstdigit $subdigits 1
; StrCmp $firstdigit «0» 0 +2
; StrCpy $subdigits $subdigits 2 1
; IntFmt $char "%c" $subdigits
; StrCpy $output "$output$char"
; IntOp $counter $counter + 3
; StrCpy $subdigits $input 3 $counter
; StrCmp $subdigits "" 0 _loop
; MessageBox MB_OK $output
; Abort
Но ко всему NSIS, практически, самый функциональный пакет инсталляции. Плюс ко всему он совершенно бесплатный. Ну а когда всё в фирме им собирается, знаний и манов по нему накапливается много и реализация задач становится не столь трудоёмкой.PavelSandovin
10.09.2013 15:06Ничто не мешает делать отступы, как делают все нормальные люди, чтобы написать читаемый код.
Например, после StrCmp — это же условный оператор — следует делать отступ:
StrCmp $firstdigit "0" 0 +2 StrCpy $subdigits $subdigits 2 1 IntFmt $char "%c" $subdigits
Если следить за собой, код получается вполне понятный.
UksusoFF
Создание своих страничек в установщике? Что это?
PlazmX Автор
«Page custom» в NSIS. Как вы ещё предложите это назвать по русски?
UksusoFF
«Установщик с дополнительными возможностями» суть другая но зато понятней о чем речь.