Содержание статьи

Qt Installer Framework – это инструмент для создания графических установщиков под Windows, Linux и macOS, который используется в экосистеме Qt, но не ограничивается только Qt-приложениями. Он подходит для распространения бинарных файлов, библиотек, конфигураций и дополнительных модулей, поддерживает офлайн- и онлайн-режимы, обновления и удаление программ.
Работа с Qt Installer Framework строится вокруг четкой структуры каталогов, XML-конфигураций и JavaScript-скриптов. Основные элементы – файл config.xml, каталог packages с описанием компонентов и утилиты командной строки binarycreator и repogen. Понимание назначения каждого файла позволяет быстро собрать установщик без использования сторонних GUI-оболочек.
Инструмент дает контроль над логикой установки: выбор компонентов, проверка версии ОС, установка зависимостей, копирование файлов по условиям и выполнение пользовательских сценариев. Это делает его удобным для сборки дистрибутивов с модульной архитектурой, где один установщик может покрывать несколько вариантов поставки приложения.
В статье рассматривается практическая схема работы с Qt Installer Framework: от подготовки структуры проекта до сборки готового инсталлятора и проверки его поведения на целевой системе. Материал ориентирован на разработчиков, которым нужен воспроизводимый и управляемый процесс установки без ручной настройки на стороне пользователя.
Qt Installer Framework: как пользоваться
Работа с Qt Installer Framework начинается с подготовки структуры проекта. В корне создаются каталоги config и packages. В config размещается файл config.xml, где задаются имя продукта, версия, путь установки по умолчанию, иконка и параметры интерфейса установщика. Значения в этом файле напрямую влияют на поведение мастера установки и должны соответствовать реальной логике распространения приложения.
Каталог packages содержит один или несколько пакетов компонентов. Каждый компонент оформляется в виде отдельной папки с подпапками data и meta. В meta/package.xml указываются идентификатор компонента, версия, зависимости и условия отображения. В data размещаются файлы, которые будут скопированы в систему пользователя. Структура внутри data повторяет целевое расположение файлов после установки.
Для управления логикой используется JavaScript-файл installscript.qs, подключаемый в package.xml. Через него настраиваются проверки операционной системы, выбор компонентов, реакции на действия пользователя и дополнительные шаги, такие как создание ярлыков или запуск внешних процессов. Скрипты выполняются на разных этапах установки и позволяют изменить стандартное поведение мастера.
Сборка офлайн-установщика выполняется утилитой binarycreator. Команда указывает путь к каталогу config, директории packages и имя выходного файла. Для онлайн-распространения дополнительно используется repogen, который формирует репозиторий пакетов. После сборки установщик проверяется на чистой системе, чтобы убедиться в корректной установке, удалении и обновлении компонентов.
Установка Qt Installer Framework и проверка доступных инструментов

Qt Installer Framework распространяется отдельно от Qt Creator и стандартного SDK. Установка выполняется через официальный Qt Online Installer, где компонент расположен в разделе инструментов. При выборе версии важно учитывать целевую платформу и разрядность, так как собранный установщик будет зависеть от используемого набора утилит.
После установки необходимо проверить, что бинарные файлы доступны из командной строки. По умолчанию они размещаются в каталоге QtIFW внутри директории Qt, например Qt/Tools/QtInstallerFramework. Для удобства этот путь добавляется в переменную среды PATH, чтобы запуск команд не требовал указания полного расположения исполняемых файлов.
| Инструмент | Назначение | Как проверить |
|---|---|---|
| binarycreator | Сборка офлайн-установщика | binarycreator —help |
| repogen | Создание онлайн-репозитория пакетов | repogen —help |
| installerbase | Базовый исполняемый файл установщика | installerbase —version |
| archivegen | Создание архивов пакетов | archivegen —help |
После подтверждения доступности всех утилит можно переходить к созданию структуры проекта установщика. На этом этапе важно зафиксировать используемую версию Qt Installer Framework, так как поведение XML-схем и JavaScript API может отличаться между релизами.
Создание структуры проекта установщика и назначение каталогов

Проект установщика в Qt Installer Framework строится на фиксированной иерархии каталогов. В корне создаётся рабочая директория, внутри которой обязательно присутствуют папки config и packages. Нарушение этой структуры приводит к ошибкам сборки на этапе запуска binarycreator.
Каталог config содержит файл config.xml, который определяет параметры всего установщика: имя продукта, версию, путь установки, отображаемое название компании и базовые настройки интерфейса. Дополнительно здесь может размещаться файл style.qss и ресурсы интерфейса, если требуется изменить внешний вид мастера установки.
Каталог packages используется для описания устанавливаемых компонентов. Каждый компонент оформляется в виде отдельной директории с уникальным идентификатором, например com.example.app. Внутри неё создаются подпапки meta и data. В meta хранятся файлы описания пакета и скрипты, а в data – все файлы, которые будут скопированы на систему пользователя.
Структура внутри data напрямую соответствует конечному расположению файлов после установки. Если приложение должно быть установлено в каталог bin, конфигурационные файлы – в config, а библиотеки – в lib, эти папки создаются именно здесь. Такой подход упрощает контроль результата установки и снижает риск некорректного размещения файлов.
При наличии нескольких компонентов рекомендуется выстраивать иерархию пакетов заранее, учитывая зависимости и порядок установки. Это позволяет избежать конфликтов имён, дублирования файлов и ошибок при обновлении или удалении отдельных частей приложения.
Настройка конфигурационного файла config.xml для установщика

Файл config.xml размещается в каталоге config и управляет параметрами всего установщика, а не отдельных компонентов. В корневом элементе <Installer> задаются значения, которые определяют отображаемое имя продукта, внутренний идентификатор и номер версии, используемый при обновлениях.
Параметры <Name> и <Title> отвечают за текст в заголовке окна и списке установленных программ. Поле <Version> должно синхронизироваться с версиями пакетов в каталоге packages, иначе механизм обновления может игнорировать новые сборки. Значение <Publisher> используется системой при регистрации установленного приложения.
Каталог установки задаётся элементом <TargetDir>. Здесь рекомендуется использовать переменные, такие как @ApplicationsDir@ или @HomeDir@, чтобы путь корректно формировался на разных операционных системах. Жёстко заданные абсолютные пути часто приводят к ошибкам прав доступа.
Поведение интерфейса настраивается через параметры <WizardStyle>, <StartMenuDir> и <ProductImages>. С их помощью задаётся стиль мастера, имя каталога в меню приложений и изображения для экранов установки. Если требуется скрыть выбор каталога или отключить отдельные шаги, это делается на уровне конфигурации, без изменения кода компонентов.
Для онлайн-установщиков в config.xml добавляется блок <RemoteRepositories> с URL репозиториев и приоритетами. Корректная настройка этого раздела позволяет загружать пакеты по требованию и использовать один установщик для распространения разных версий приложения.
Описание компонентов и пакетов в директории packages
Каталог packages содержит набор устанавливаемых компонентов, каждый из которых оформляется как отдельный пакет с уникальным идентификатором. Имя директории пакета используется как внутренний ID и должно совпадать со значением тега <Name> в файле описания. Рекомендуется использовать обратную доменную нотацию, чтобы избежать конфликтов.
Внутри пакета обязательны каталоги meta и data. В meta размещается файл package.xml, который определяет свойства компонента: версию, описание, зависимости и правила отображения в списке выбора. Поле <Version> используется при сравнении установленных и доступных пакетов, поэтому его изменение должно сопровождаться реальным обновлением содержимого.
Теги <Dependencies> и <AutoDependOn> задают связь между компонентами. Это позволяет автоматически устанавливать необходимые библиотеки или модули при выборе основного пакета. Некорректно описанные зависимости часто приводят к неполной установке или ошибкам удаления.
Каталог data содержит файлы, которые копируются на систему пользователя. Структура директорий внутри data полностью повторяет конечное расположение после установки. Если компонент добавляет исполняемые файлы, ресурсы и конфигурации, они должны быть разнесены по соответствующим папкам уже на этом этапе.
Дополнительная логика пакета задаётся через файл installscript.qs, подключаемый в package.xml. С его помощью можно проверять окружение, управлять доступностью компонента и выполнять действия после копирования файлов. Использование скриптов оправдано только при необходимости изменить стандартный сценарий установки.
Добавление файлов приложения и настройка правил установки

Файлы приложения добавляются в каталог data соответствующего пакета в директории packages. Всё содержимое этого каталога копируется в целевую систему без дополнительных описаний, поэтому структура папок должна заранее соответствовать итоговому расположению после установки.
Для исполняемых файлов и библиотек рекомендуется сохранять оригинальные имена и относительные пути, чтобы избежать проблем с загрузкой зависимостей. Если приложение использует внешние ресурсы, такие как плагины или конфигурации, они должны находиться рядом с бинарными файлами либо в заранее определённых подкаталогах, которые учитываются логикой запуска.
Правила установки настраиваются через файл package.xml и скрипты. С помощью атрибутов пакета можно ограничить установку по платформе или версии системы. Для более точного контроля используется JavaScript-файл installscript.qs, где проверяются условия и принимается решение о копировании файлов или доступности компонента.
Если требуется выполнить действия после размещения файлов, такие как создание ярлыков, регистрация сервисов или изменение прав доступа, эти шаги добавляются в обработчики событий установки. Такой подход позволяет связать копирование файлов и последующие операции в одном пакете без внешних инструментов.
При обновлении приложения важно сохранять совместимость структуры каталогов. Удаление или переименование файлов без учёта уже установленной версии может привести к конфликтам при повторном запуске установщика или его режиме обновления.
Использование скриптов JavaScript для логики установки
Qt Installer Framework использует встроенный JavaScript-движок для управления поведением установщика на разных этапах. Скрипты размещаются в каталоге meta пакета и подключаются через файл package.xml. Основной файл обычно называется installscript.qs, но имя может быть любым.
Через JavaScript доступен объект installer, который предоставляет информацию о платформе, выбранных компонентах и текущем шаге мастера. С его помощью выполняются проверки операционной системы, разрядности и наличия установленных версий приложения. Это позволяет блокировать установку при несоответствии условий ещё до копирования файлов.
Скрипты позволяют управлять видимостью и выбором компонентов. Например, компонент может быть автоматически отмечен или скрыт в зависимости от выбора другого пакета. Такая логика реализуется в обработчиках инициализации компонента и не требует изменения конфигурации всего установщика.
На этапе завершения установки JavaScript используется для выполнения дополнительных действий: создания ярлыков, запуска исполняемых файлов, записи параметров в конфигурационные файлы. Для запуска внешних процессов применяется класс QProcess, доступный из среды установщика.
При работе со скриптами важно учитывать порядок их выполнения и избегать сложных зависимостей между пакетами. Логика должна быть локализована внутри компонента, чтобы обновление или удаление одного пакета не влияло на корректность установки остальных.
Сборка установщика с помощью binarycreator
Утилита binarycreator используется для формирования офлайн-установщика на основе подготовленных каталогов config и packages. Команда запускается из каталога, где расположена структура проекта, либо с указанием абсолютных путей.
Минимальный набор параметров включает путь к конфигурации, каталог пакетов и имя выходного файла. Пример типового вызова:
binarycreator -c config/config.xml -p packages MyInstaller.exe
При сборке важно контролировать содержимое проекта перед запуском команды:
- проверить корректность XML-файлов без синтаксических ошибок
- убедиться, что каждый пакет содержит каталоги meta и data
- синхронизировать версии в config.xml и package.xml
Для управления поведением сборки применяются дополнительные ключи командной строки:
- —offline-only – сборка установщика без поддержки онлайн-репозиториев
- —platform – указание целевой платформы при кросс-сборке
Если проект использует собственные ресурсы интерфейса или изменённый installerbase, они подключаются отдельными параметрами. Это позволяет заменить стандартный исполняемый файл и встроить дополнительные данные без правки пакетов.
После завершения сборки рекомендуется выполнить проверку результата:
- запуск установщика на системе без установленного приложения
- установка всех доступных компонентов
- повторный запуск в режиме удаления
- проверка поведения при повторной установке
Ошибки, возникшие на этапе сборки, почти всегда связаны с некорректными путями, отсутствующими файлами или несоответствием идентификаторов пакетов. Их проще устранить до распространения установщика, чем после выпуска.
Тестирование установщика и поиск ошибок в процессе установки
Тестирование собранного установщика необходимо проводить на чистой системе или виртуальной машине, чтобы исключить влияние ранее установленных версий приложения и сторонних библиотек. Это позволяет выявить ошибки копирования файлов, некорректные пути и проблемы с зависимостями.
Рекомендуется выполнить следующие шаги:
- Запуск установщика и проверка отображения всех компонентов и шагов мастера.
- Установка всех пакетов и проверка размещения файлов в целевых директориях.
- Проверка работы JavaScript-логики, включая условия отображения компонентов и выполнение скриптов post-install.
- Запуск приложения и проверка корректной работы всех модулей и библиотек.
- Удаление установленных компонентов и проверка очистки файлов и записей в системе.
- Повторная установка для проверки механизма обновления и предотвращения конфликтов версий.
При тестировании следует обратить внимание на:
- Соответствие структуры папок внутри data с конечными путями на целевой системе.
- Работу зависимостей между пакетами, включая автоматическое добавление обязательных компонентов.
- Корректность значений в config.xml, особенно <Version> и <TargetDir>.
- Работу с ярлыками, изменением прав и запуском внешних процессов через скрипты.
Все найденные ошибки фиксируются и корректируются на уровне структуры пакетов, XML-конфигураций или JavaScript-логики. Только после прохождения полного цикла тестирования установщик готов к распространению.
Вопрос-ответ:
Для чего нужен файл config.xml в Qt Installer Framework?
Файл config.xml задаёт параметры всего установщика: имя продукта, версию, путь установки, отображение в меню приложений и стиль мастера установки. Он определяет, как установщик взаимодействует с системой пользователя, а также указывает репозитории для онлайн-пакетов. Корректное заполнение полей гарантирует, что установка и обновления пройдут без ошибок.
Как правильно структурировать каталог packages для установки нескольких компонентов?
Каждый компонент оформляется как отдельная директория с уникальным идентификатором, внутри которой создаются папки meta и data. В meta хранится package.xml с описанием версии, зависимостей и условий отображения, а в data — файлы, которые будут скопированы на систему. Такая структура позволяет управлять зависимостями, обновлениями и удалением отдельных компонентов без конфликтов.
Как использовать скрипты JavaScript для настройки логики установки?
JavaScript-файлы подключаются через package.xml и дают доступ к объекту installer. С их помощью проверяются условия ОС, разрядность, выбранные компоненты и выполняются действия после копирования файлов. Например, можно создавать ярлыки, запускать внешние процессы или скрывать компоненты в зависимости от выбранных пакетов.
Какие параметры командной строки binarycreator важны для сборки установщика?
Основные параметры: -c указывает путь к config.xml, -p — каталог с пакетами, имя выходного файла задаётся отдельно. Дополнительно можно использовать —offline-only для сборки без онлайн-репозиториев, —verbose для подробного вывода и —platform для указания целевой платформы при кросс-сборке.
Какие шаги включают тестирование установщика перед распространением?
Тестирование проводится на чистой системе и включает: запуск установщика и проверку всех компонентов, установку и проверку размещения файлов, выполнение скриптов JavaScript, проверку работы приложения и зависимостей, удаление компонентов и повторную установку для проверки обновлений. Особое внимание уделяется структуре файлов, зависимостям между пакетами и корректной работе ярлыков и дополнительных процессов.
