IscanderChe
IscanderChe2 августа 2019 г. 2:37

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

Содержание

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

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


Для этого сформируем 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 хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Evgenii Legotckoi
  • 5 августа 2019 г. 5:00

А не думали попробовать использовать Qt Installer Framework для сборки дистрибутива?

IscanderChe
  • 5 августа 2019 г. 6:02

Насколько я понял из доков, его надо собирать статической сборкой Qt, а я с этим не в ладах...

Evgenii Legotckoi
  • 5 августа 2019 г. 6:06

Нет, ничего подобного. В статье без статической сборки сделано.

IscanderChe
  • 5 августа 2019 г. 6:16

Я имею ввиду, сам фреймворк, перед тем, как его использовать, надо собрать из исходников статическим Qt.

Evgenii Legotckoi
  • 5 августа 2019 г. 6:17

нет. Его можно установить из Maintenance Tool, как и Qt Creator

IscanderChe
  • 5 августа 2019 г. 6:23

У меня с Maintenance Tool засада. При открытии тула он требует логин-пароль Qtшного аккаунта, я ввожу то, что надо,а он не принимает его. И на этом всё. Я даже не могу установить другую версию Qt с того же аккаунта, приходится новый заводить.

Evgenii Legotckoi
  • 5 августа 2019 г. 6:26

Вообще, можно всё установить и без аккаунта, он не очень-то и обязателен, если использовать Community Edition

IscanderChe
  • 5 августа 2019 г. 6:59

В смысле? Я смотрю на странице https://www.qt.io/download, там только два варианта: Commercial и Open Source. Использую вторую.

Evgenii Legotckoi
  • 5 августа 2019 г. 7:01

Open Source и есть Community ))

IscanderChe
  • 5 августа 2019 г. 7:05

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

Evgenii Legotckoi
  • 5 августа 2019 г. 7:34

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

IscanderChe
  • 25 декабря 2019 г. 14:04

Поразбирался на досуге с QtIFW, вроде бы нормально. Спасибо за совет. Напрягает только, что на Windows 7 кнопка "Снять отметки выбора со всех компонентов" криво отображается, только часть текста видна. На Windows 10 всё в порядке с отображением текста.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
г
  • ги
  • 23 апреля 2024 г. 22:51

C++ - Тест 005. Структуры и Классы

  • Результат:41баллов,
  • Очки рейтинга-8
l
  • laei
  • 23 апреля 2024 г. 16:19

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

  • Результат:10баллов,
  • Очки рейтинга-10
l
  • laei
  • 23 апреля 2024 г. 16:17

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
k
kmssr9 февраля 2024 г. 2:43
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко5 февраля 2024 г. 9:50
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 декабря 2023 г. 18:30
Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 декабря 2023 г. 16:38
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik19 декабря 2023 г. 5:01
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
G
Gar22 апреля 2024 г. 12:46
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil Academics20 апреля 2024 г. 14:45
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasov14 апреля 2024 г. 13:41
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел Дорофеев14 апреля 2024 г. 9:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrex4 апреля 2024 г. 11:47
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Следите за нами в социальных сетях