- 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 всё в порядке с отображением текста.