IscanderChe
IscanderChe02 серпня 2019 р. 02: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
  • 05 серпня 2019 р. 05:00

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

IscanderChe
  • 05 серпня 2019 р. 06:02

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

Evgenii Legotckoi
  • 05 серпня 2019 р. 06:06

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

IscanderChe
  • 05 серпня 2019 р. 06:16

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

Evgenii Legotckoi
  • 05 серпня 2019 р. 06:17

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

IscanderChe
  • 05 серпня 2019 р. 06:23

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

Evgenii Legotckoi
  • 05 серпня 2019 р. 06:26

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

IscanderChe
  • 05 серпня 2019 р. 06:59

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

Evgenii Legotckoi
  • 05 серпня 2019 р. 07:01

Open Source и есть Community ))

IscanderChe
  • 05 серпня 2019 р. 07:05

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

Evgenii Legotckoi
  • 05 серпня 2019 р. 07:34

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

IscanderChe
  • 25 грудня 2019 р. 14:04

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

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

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 11:37

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

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 11:29

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

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
i
innorwall15 листопада 2024 р. 06:03
Qt/C++ - Урок 060. Налаштування зовнішнього вигляду програми під час виконання I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
i
innorwall14 листопада 2024 р. 22:42
Як скопіювати файли в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
i
innorwall14 листопада 2024 р. 20:09
Qt/C++ - Підручник 068. Hello World за допомогою системи збирання CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
i
innorwall14 листопада 2024 р. 15:05
EVILEG-CORE. Використання Google reCAPTCHA 2001; 98 29 34 priligy buy
Тепер обговоріть на форумі
i
innorwall14 листопада 2024 р. 14:39
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
i
innorwall11 листопада 2024 р. 21:55
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9Anonim25 жовтня 2024 р. 19:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов03 жовтня 2024 р. 14:05
Реализация навигации по разделам Спасибо Евгений!

Слідкуйте за нами в соціальних мережах