Кастомизация диалоговых окон WixToolSet на примере windows installer и executable packages
Приветствую!
В этой статье я покажу вам свой вариант использования набора утилит WixToolSet для создания кастомных диалоговых окон с возможностью получения предустановленной информации (пароли, явки и прочие параметры). И приведу пример использования кастомных окон в простом кейсе.
Тем, кому лениво читать, предлагаю ознакомиться с проектом на github.
Проект состоит из двух частей:
Установщик MSI — установщик основного продукта, в задачи которого входит:
a. запросить пароли пользователя и рута;
b. скопировать скрипт в назначенную папку и запустить его с параметрами, по результату работы которого мы получаем файл с паролями;
c. открыть блокнотом итоговый файл.Установщик EXE — альтернативный установщик, который позволяет предварительно установить все необходимые компоненты для работы основного продукта, а после и сам продукт.
Его задачи и то, что мы делаем:
a. устанавливаем необходимые компоненты (в качестве примера представлен код тихой установки MSSQL Server 2016);
b. запрашиваем пароли пользователя и рута;
c. запускаем установщик основного продукта, где полученные пароли пользователя и рута передаем в качестве параметров (установщик основного продукта запускается в тихом режиме, без диалоговых окон);
d. установщик основного продукта выполняет все действия, указанные в п.1, за исключением п.1.а.
Я не буду заострять внимание на основах создания проектов windows installer и executable packages, а также описывать связи между ними, так как тема данной статьи — кастомизация. Считаю, что данного кейса для демонстрации возможностей оных вполне хватает. Кто столкнулся с набором утилит впервые, предлагаю рабочий проект на github и несколько полезных ссылок в конце статьи. Поехали!
Кастомизация пакетного установщика MSI
По сценарию работы основного продукта у пользователя необходимо запросить пароли пользователя и рута, в этом нам поможет кастомное диалоговое окно.
Рисунок №1
Для этого создаем в проекте файл PasswordDlg.wxs со следующим содержанием:
В качестве локализации у нас будет выступать файл Variables.wxl со следующим содержанием:
Настройка сервера
Укажите информацию и нажмите кнопку "Далее"
Установка [ProductName]
Укажите пароли пользователей базы данных:
Для обеспечения инфоромационной безопасности и сохранности корпоротивной информации, необходимо заменить пароли на более сложные
Введите пароль:
Далее
Назад
Отмена
Пользователь:
Пароль для пользователя:
Пароль для рута:
Далее, нам необходимо создать свой сценарий диалоговых окон (далее — сценарий), куда будет добавлено новое окно для запроса пароля пользователя и рута. В нашем проекте мы используем сценарий WixUI_InstallDir, файл которого расположен по пути: C:\Program Files (x86)\WiX Toolset v3.11\SDK\wixui\WixUI_InstallDir.wxs.
Копируем этот файл в наш проект, предварительно переименовав в MyWixUI_InstallDir.wxs.
Набор утилит WixToolSet предоставляет несколько стандартных сценариев диалоговых окон. Список всех доступных сценариев можно посмотреть тут.
Как вы поняли из названия, сценарий представляет собой цепочку из диалоговых окон с описанием действий при нажатии на кнопки: «Далее», «Назад», «Отмена» и т.д. Нам остается всего лишь вставить свое окно в цепочку и указать ссылки на предыдущее и следующее окна.
Полный список доступных диалоговых окон можно посмотреть тут.
Содержание файла MyWixUI_InstallDir.wxs у нас следующее:
WixUI_Font_Title используется в PasswordDlg.wxs
1
"1"]]>
1
NOT Installed
Installed AND PATCH
1
LicenseAccepted = "1"
1
1
NOT WIXUI_DONTVALIDATEPATH
"1"]]>
WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"
1
1
NOT Installed
Installed AND NOT PATCH
Installed AND PATCH
1
1
1
1
Теперь осталось добавить наш новый сценарий, картинки баннера и хедера в проект, для этого в файле Product.wxs указываем:
На этом вся работы выполнена, можно запускать проект и наслаждаться результатом.
Рисунок №2
Кастомизация исполняемого установщика EXE
Основная цель использования альтернативного установщика EXE — инсталляция дополнительных компонентов для работы основного продукта. Также для удобства мы запросим пароли пользователя и рута, передадим их в качестве параметров в установщик MSI, который запускается в тихом режим, без демонстрации диалоговых окон.
Для наших целей нам подойдет кастомизация окна опций установщика MSI, где в качестве шаблона установщика мы используем RtfLargeTheme.xml и файл локализации RtfTheme.wxl.
Копируем эти файлы в наш проект, предварительно переименовав в MyRtfLargeTheme.xml и MyRtfTheme.wxl, соответственно. Файлы расположены тут: C:\Program Files (x86)\WiX Toolset v3.11\SDK\themes.
Чтобы попасть в опции необходимо нажать кнопку «Опции» в окне приветствия, после запуска установщика EXE, далее нам откроется окно запроса паролей пользователя и рута, как показано на рисунке 3.
Рисунок №3
Для получения такого окна необходимо изменить файл шаблона MyRtfLargeTheme.xml, разделы
#(loc.InstallVersion)
#(loc.InstallAcceptCheckbox)
#(loc.OptionsHeader)
#(loc.OptionsUserPwd)
DefaultUserPwd
#(loc.OptionsRootPwd)
DefaultRootPwd
Содержание файла локализации MyRtfTheme.wxl я показывать не буду, думаю, что с ним вы разберетесь самостоятельно.
Нам осталось указать получившиеся шаблон и локализацию в проект, для этого нам нужно внести изменения в файл Bundle.wxs, добавив следующее:
LicenseFile="EULA-RU.rtf"
LogoFile="logo.ico"
SuppressRepair="no"
ThemeFile="MyRtfLargeTheme.xml"
LocalizationFile="MyRtfTheme.wxl"
ShowVersion="yes"/>
В итоге у нас получилась некая обертка, которая позволяет установить все необходимые зависимости или компоненты для вашего продукта, а после сам продукт, предварительно запросив всю необходимую информацию.
Рисунок №4
Как мы видим, сложности в получении необходимой информации для полной и качественной установки вашего приложения нет, все будет зависеть только от вашей фантазии и разумности.
Надеюсь, сильно ругать не будете, это моя первая статья. Проба пера!
Всем спасибо и до скорого!
Автор статьи: Сокол Даниил
П.С. Полезные ссылки для изучения набора утилит WixToolSet.
Статьи от @Terror, где описаны основы работы с wixtoolset:
Создание инсталлятора с помощью WiX.
Создание инсталлятора с помощью WiX. Часть 2.
Создание инсталлятора с помощью WiX. Часть 3.
Статья от автора @Revolution, где описан прекрасный способ сборки пакета msi со сторонними файлами:
Автоматическое добавление файлов в WiX инсталлятор.