Проект Simple Tracker. Часть 8: формирование дистрибутива и итоги

Iscander Che, Simple Tracker, C++, Qt

В заключение подготовим получаемые при компиляции файлы для дистрибуции. Неважно, что проект локальный. Удобнее иметь под рукой инсталлятор, на всякий случай. С его помощью можно, например, автоматизировано очистить реестр при удалении программы с диска.

Но начнём с того, что атрибутируем исполняемый файл, как это делается в других приложениях: зададим номер версии, наименование продукта, копирайт и иконку исполняемого файла.

Для этого сформируем 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 завершён. Интересных проектов!

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

А не думали попробовать использовать 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 ))

Так вот она и требует аккаунта.

Ну это уже другой вопрос, что она требует аккаунта. У меня есть аккаунт и он работает ))

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ищу работу?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

СВ
23 октября 2019 г. 1:00
Семен Волох

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:70баллов,
  • Очки рейтинга1
SS
22 октября 2019 г. 14:31
Samantha Smith

Qt - Тест 001. Сигналы и слоты

  • Результат:52баллов,
  • Очки рейтинга-4
МБ
21 октября 2019 г. 1:25
Михаил Булатов

C++ - Тест 002. Константы

  • Результат:16баллов,
  • Очки рейтинга-10
Последние комментарии
17 октября 2019 г. 2:17
Евгений Легоцкой

Используем, там где требуется :)
MP
17 октября 2019 г. 2:15
Mikhail Petrov

Совет: подключайте ресурсы динамически. Используйте Resource Compiler: https://doc.qt.io/qt-5/rcc.html
16 октября 2019 г. 6:45
Евгений Легоцкой

Если это не чистой воды спам, а по делу, то без проблем. Но в таком случае лучше создавайте отдельный вопрос на форуме . При создании вопроса есть поле, в котором можно указать статью…
КК
16 октября 2019 г. 6:39
Кирилл Кирилыч

А тут можно ссылки на сторонний ресурс показывать? Нашёл на habr похожую статью, только там чуток отличается код и про локальный сервер написано, нужно чтоб кто то понимающий посмотрел и своё …
Сейчас обсуждают на форуме
23 октября 2019 г. 4:06
Евгений Легоцкой

Ну если после обновления начало появляться, то тогда откатить драйвера. А вообще, если это жить не мешает и код работает как и раньше, то просто проигнорировать эти сообщения.
22 октября 2019 г. 2:42
Pavel K.

Всем привет , Пытаюсь реализовать класс для работы с блютуз (Bluetooth Handler) для мобилки , с использование QBluetoothDeviceInfo и QBluetoothDeviceDiscoveryAgent . Может у кого е…
22 октября 2019 г. 2:16
Pavel K.

попробуй сделать через свой собственный компонет , те возьми контрол Component, например , переорпедели как свой , в нем что нить типо проперти type : disk1, disk2 (сделай метод в структуре …
Е
22 октября 2019 г. 0:03
Евгений_Канусовский@1981

Этот алгоритм предназначен для того чтобы исключить из обработки строки содержащие буквенные символы. Если Вам не трудно опишите пожалуйста как бы Вы написали этот алгоритм, желательно в коде?
MP
21 октября 2019 г. 7:03
Mikhail Petrov

Зависит от вашей задачи. Можете обратить внимание на этот пример: https://doc.qt.io/qt-5/qtqml-referenceexamples-properties-example.html QQmlListProperty используется мною достаточно ч…
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB