- PVSM.RU - https://www.pvsm.ru -
Нет времени и желания изучать километровые файлы WiX, чтобы собрать MSI инсталлер для своего проекта, погружаясь при этом в бездны MSDN? Хотите собирать инсталлер, описывая его простыми и понятными терминами, в несколько строк? Есть клиническая склонность к кроссплатформенности и сборкам под Linux & Docker? Ну тогда вам под кат!
Собственно говоря, именно с этими "хотелками" наш проект [1] кросс-платформенного редактора векторной графики и столкнулся пару месяцев назад.
Мы знали про WiX Toolset (Windows Installer XML), но даже беглый просмотр туториалов на официальном сайте навевал грусть и уныние — без серьезного погружения в XML описания инсталляторов не обойтись. Использовали более простой MakeMsi, но в нем была масса недоработок. И опять же, все эти инструменты не годились для сборки MSI под Linux.
Поиски привели к проекту wixl [2], который собирал MSI в Linux, но страдал серьезной недоработкой по функционалу и требовал те же XML файлы чудовищных размеров, что и WiX.
В результате, чтобы обзавестись нужным инструментом для сборки, мы переимплементили логику wixl на python, исправив многие недочеты и добавив необходимый функционал, и сделали проект кроссплатформенным. Так и появился WIX.Py — сборщик MSI с весьма низким порогом вхождения.
Процесс создания MSI пакета упрощен до предела:
В произвольной папке (напр. build
) формируем содержимое для инсталляции в том виде, в котором оно будет на целевом компьютере.
Заполняем небольшой JSON-файл. Например:
{
"Name": "MyApp",
"UpgradeCode": "3AC4B4FF-10C4-4B8F-81AD-BAC3238BF690",
"Version": "0.1",
"Manufacturer": "My Company",
"Description": "MyApp 0.1 Installer",
"Comments": "Licensed under GPLv3+",
"Keywords": "wxs, xml, build",
"Win64": true,
"_CheckX64": true,
"_AppIcon": "resources/myapp.ico",
"_ProgramMenuFolder": "My Company",
"_Shortcuts": [
{"Name": "MyApp",
"Description": "MyApplication",
"Target": "myapp.exe",
"AddOnDesktop": true,
"OpenWith": [".xml", ".wxs", ".yml"]
}
],
"_SourceDir": "build/",
"_InstallDir": "myapp-0.1",
"_OutputName": "myapp-0.1_win64.msi",
"_OutputDir": "./"
}
Генерируем MSI пакет командой:
wix.py <имя_файла>.json
Да, это полностью рабочий пример MSI пакета, который проверит перед установкой, что Windows 64bit, установит приложение в Program Files
, добавит приложение в программное меню и на рабочий стол, и привяжет указанные форматы файлов к устанавливаемому приложению. Никакой магии и шаманства с регистром.
Можно еще больше сократить пример до 5-6 строк, но тогда функционал инсталлятора будет ну совсем куцый.
Используя WiX.Py, cборку MSI можно проводить как в Windows, так и в Linux, в т.ч. в Docker-контейнерах. Поскольку базовая libmsi может быть собрана на многих других UNIX-системах (напр. macOS), формально WiX.Py можно и на них использовать, только практического смысла это не несет.
Описание различных нюансов вы можете найти в документации проекта [3].
Если вам подходит WiX.Py для решения задач по созданию MSI пакетов, но не хватает какого-либо функционала, заходите на наш сайт https://wix.sk1project.net [4] и создавайте запрос на расширение функционала. Тоже самое касается обнаруженных багов — сообщайте и мы будем с ними бороться. Там же на сайте найдете исходный код и готовые пакеты для разных платформ.
Если присутствует желание сравнить с WiX, то на Хабре уже не раз были статьи, посвященные WiX: 1 [5], 2 [6], 3 [7], 4 [8].
Автор: sk1project
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/293556
Ссылки в тексте:
[1] наш проект: https://sk1project.net
[2] проекту wixl: https://wiki.gnome.org/msitools
[3] документации проекта: https://wix.sk1project.net/docs.php
[4] https://wix.sk1project.net: https://wix.sk1project.net
[5] 1: https://habr.com/post/68616/
[6] 2: https://habr.com/post/69129/
[7] 3: https://habr.com/post/70616/
[8] 4: https://habr.com/post/253819/
[9] Источник: https://habr.com/post/424091/?utm_source=habrahabr&utm_medium=rss&utm_campaign=424091
Нажмите здесь для печати.