- 1. Підсумки
На закінчення підготуємо одержувані під час компіляції файли для дистрибуції. Не має значення, що проект локальний. Зручніше мати під рукою інсталятор, про всяк випадок. З його допомогою можна, наприклад, автоматично очистити реєстр при видаленні програми з диска.
Але почнемо з того, що атрибутуємо виконуваний файл, як це робиться в інших додатках: задамо номер версії, найменування продукту, копірайт та іконку файлу, що виконується.
Для цього сформуємо rc-файл і додамо його до відповідної директиви pro-файлу.
# ICTrackerServer.rc IDI_ICON1 ICON "images/ICTracker.ico" #include <windows.h> #define VER_FILEVERSION 0,1 #define VER_FILEVERSION_STR "0.1\1" #define VER_PRODUCTVERSION 0,1 #define VER_PRODUCTVERSION_STR "0.1\1" #define VER_FILEDESCRIPTION_STR "ICTrackerServer" #define VER_INTERNALNAME_STR "ICTrackerServer" #define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2019, Iscander Che" #define VER_ORIGINALFILENAME_STR "ICTrackerServer.exe" #define VER_PRODUCTNAME_STR "ICTrackerServer" VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_PRODUCTVERSION BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "FileDescription", VER_FILEDESCRIPTION_STR VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", VER_INTERNALNAME_STR VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR VALUE "ProductName", VER_PRODUCTNAME_STR VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0419, 1252 END END
# ICTrackerServer.pro RC_FILE = ICTrackerServer.rc
Аналогічно зробимо для клієнта.
Для збору dll-файлів для автономної роботи виконуваного файлу скористаємося утилітою windeployqt.
windeployqt %путь_к_папке_с_исполняемым_файлом%\ICTrakerServer.exe
Для клієнта зробимо те саме.
Тепер займемося збиранням дистрибутива. Для цього скористаємось програмою Inno Setup.
Створимо скрипт збірки у самій Inno Setup. Можна це робити за допомогою майстра, але можна вручну відкоригувати шаблон нижче. У мене був колись написаний шаблон із прикладу з мережі.
;------------------------------------------------------------------------------ ; ; Установочный скрипт для Inno Setup 5.6.1 ; для ПО ICTracker ; (c) Iscander Che, 26.07.2019 ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; Определяем некоторые константы ;------------------------------------------------------------------------------ ; Имя приложения #define Name "ICTracker" ; Версия приложения #define Version "0.1" ; Фирма-разработчик #define Publisher "Iscander Che" ; Сафт фирмы разработчика #define URL "iscander.che@gmail.com" ; Имя исполняемого модуля #define ExeName "ICTracker.exe" ; Имя папки по умолчанию #define DirName "ICTracker" ; Корневой путь по умолчанию #define RootDir "G:\repos_wc" ;------------------------------------------------------------------------------ ; Параметры установки ;------------------------------------------------------------------------------ [Setup] ; Уникальный идентификатор приложения, ;сгенерированный через Tools -> Generate GUID AppId={{C73A79D0-8EDD-4AEE-9F14-4720AFF94765} ; Прочая информация, отображаемая при установке AppName={#Name} AppVersion={#Version} AppPublisher={#Publisher} AppPublisherURL={#URL} AppSupportURL={#URL} AppUpdatesURL={#URL} ; Путь установки по-умолчанию DefaultDirName={pf}\{#DirName} ; Имя группы в меню "Пуск" DefaultGroupName={#Name} ; Каталог, куда будет записан собранный setup и имя исполняемого файла OutputDir={#RootDir}\{#DirName}\bin OutputBaseFileName={#Name}_v.{#Version}_setup ; Файл иконки SetupIconFile={#RootDir}\{#DirName}\ICTrackerServer\images\ICTracker.ico ; Параметры сжатия Compression=lzma SolidCompression=yes ;------------------------------------------------------------------------------ ; Устанавливаем языки для процесса установки ;------------------------------------------------------------------------------ [Languages] Name: "english"; MessagesFile: "compiler:Default.isl"; LicenseFile: "License_ENG.txt" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "License_RUS.txt" ;------------------------------------------------------------------------------ ; Опционально - некоторые задачи, которые надо выполнить при установке ;------------------------------------------------------------------------------ [Tasks] ; Создание иконки на рабочем столе Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked ;------------------------------------------------------------------------------ ; Файлы, которые надо включить в пакет установщика ;------------------------------------------------------------------------------ [Files] ; Исполняемый файл Source: "{#RootDir}\{#DirName}\build\release\{#Name}Server.exe"; DestDir: "{app}"; Flags: ignoreversion ; Прилагающиеся ресурсы Source: "{#RootDir}\{#DirName}\build\release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ;------------------------------------------------------------------------------ ; Указываем установщику, что иконки он должен взять из исполняемого файла ;------------------------------------------------------------------------------ [Icons] Name: "{group}\{#Name}"; Filename: "{app}\{#ExeName}" Name: "{commondesktop}\{#Name}"; Filename: "{app}\{#ExeName}"; Tasks: desktopicon ;------------------------------------------------------------------------------ ; Удаление ключей реестра при деинсталляции приложения ;------------------------------------------------------------------------------ [Registry] Root: HKCU; Subkey: "Software\ICTracker\Settings"; Flags: uninsdeletekey
Можна запускати збірку вручну через Inno Setup. Це зручно під час тестування складання, т.к. помилки в написанні директив будуть відразу показані. А можна це зробити із командного рядка (з bat-файлу). Скористаємося другим способом, оскільки перед збиранням дистрибутива:
1) потрібно видалити файли тестів Test_DataBase.exe (тести бази даних), Test_Data.exe (генерація тестової бази даних для тестування GUI) та Test_Server.exe (тестовий клієнт для тестування прийому сервером номера завдання та номера ревізії); у Inno Setup існує можливість виключення файлів з дистрибутива, але скористатися нею не зумів через неповне розуміння синтаксису директив Inno Setup;
2) додати до набору файлів дистрибутива текст ліцензії.
rem makebin.bat del /q build\release\Test_*.* copy license\LICENSE_GPL.txt build\release "%path_to_soft%\InnoSetup5\iscc" setup.iss
Все, збирання готова до використання. Тепер залишаються лише функціональні тести та введення в дослідну експлуатацію.
Підсумки
Функціональні вимоги виконані, архітектура змін не зазнавала.
Невеликим зміни були внесені до зовнішнього вигляду трекера через складність взаємодії з єдиним списком, що випадає, стану завдань. Було спрощено вигляд діалогу створення проекту, залишилися лише проекти без підтримки ВКВ. Проекти за допомогою ВКВ підключаються та архівуються в автоматизованому режимі. Найменування раніше архівованих проектів не відзначаються літерою «(А)», оскільки при вилученні з архіву проект автоматично стає активним.
Основні складнощі були у створенні бази даних: дві таблиці виключено з бази, в одній таблиці додано колонку. На майбутнє треба це врахувати та ретельніше підходити до формування структури бази даних (при необхідності її наявності).
Дякую всім за увагу. На цьому проект Simple Tracker завершено. Цікавих проектів!
А не думали попробовать использовать Qt Installer Framework для сборки дистрибутива?
Насколько я понял из доков, его надо собирать статической сборкой Qt, а я с этим не в ладах...
Нет, ничего подобного. В статье без статической сборки сделано.
Я имею ввиду, сам фреймворк, перед тем, как его использовать, надо собрать из исходников статическим Qt.
нет. Его можно установить из Maintenance Tool, как и Qt Creator
У меня с Maintenance Tool засада. При открытии тула он требует логин-пароль Qtшного аккаунта, я ввожу то, что надо,а он не принимает его. И на этом всё. Я даже не могу установить другую версию Qt с того же аккаунта, приходится новый заводить.
Вообще, можно всё установить и без аккаунта, он не очень-то и обязателен, если использовать Community Edition
В смысле? Я смотрю на странице https://www.qt.io/download, там только два варианта: Commercial и Open Source. Использую вторую.
Open Source и есть Community ))
Так вот она и требует аккаунта.
Ну это уже другой вопрос, что она требует аккаунта. У меня есть аккаунт и он работает ))
Поразбирался на досуге с QtIFW, вроде бы нормально. Спасибо за совет. Напрягает только, что на Windows 7 кнопка "Снять отметки выбора со всех компонентов" криво отображается, только часть текста видна. На Windows 10 всё в порядке с отображением текста.