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