IscanderChe
Там. 2, 2019, 12:37 Т.Қ.

Қарапайым трекер жобасы. 8-бөлім: Таралуды қалыптастыру және нәтижелер

Мазмұны

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

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


Для этого сформируем rc-файл и добавим его в соответствующую директиву pro-файла.

  1. # ICTrackerServer.rc
  2.  
  3. IDI_ICON1 ICON "images/ICTracker.ico"
  4.  
  5. #include <windows.h>
  6.  
  7. #define VER_FILEVERSION 0,1
  8. #define VER_FILEVERSION_STR "0.1\1"
  9. #define VER_PRODUCTVERSION 0,1
  10. #define VER_PRODUCTVERSION_STR "0.1\1"
  11. #define VER_FILEDESCRIPTION_STR "ICTrackerServer"
  12. #define VER_INTERNALNAME_STR "ICTrackerServer"
  13. #define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2019, Iscander Che"
  14. #define VER_ORIGINALFILENAME_STR "ICTrackerServer.exe"
  15. #define VER_PRODUCTNAME_STR "ICTrackerServer"
  16.  
  17. VS_VERSION_INFO VERSIONINFO
  18. FILEVERSION VER_FILEVERSION
  19. PRODUCTVERSION VER_PRODUCTVERSION
  20. BEGIN
  21. BLOCK "StringFileInfo"
  22. BEGIN
  23. BLOCK "040904E4"
  24. BEGIN
  25. VALUE "FileDescription", VER_FILEDESCRIPTION_STR
  26. VALUE "FileVersion", VER_FILEVERSION_STR
  27. VALUE "InternalName", VER_INTERNALNAME_STR
  28. VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
  29. VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
  30. VALUE "ProductName", VER_PRODUCTNAME_STR
  31. VALUE "ProductVersion", VER_PRODUCTVERSION_STR
  32. END
  33. END
  34.  
  35. BLOCK "VarFileInfo"
  36. BEGIN
  37. VALUE "Translation", 0x0419, 1252
  38. END
  39. END
  1. # ICTrackerServer.pro
  2.  
  3. RC_FILE = ICTrackerServer.rc

Аналогично сделаем для клиента.

Для сбора dll-файлов для автономной работы исполняемого файла воспользуемся утилитой windeployqt.

  1. windeployqt %путь_к_папке_с_исполняемым_файлом%\ICTrakerServer.exe

Для клиента сделаем то же самое.

Теперь займёмся сборкой дистрибутива. Для этого воспользуемся программой Inno Setup.

Создадим скрипт сборки в самой Inno Setup. Можно это делать с помощью мастера, но можно и вручную откорректировать шаблон ниже. У меня был когда-то написан шаблон с примера из сети.

  1. ;------------------------------------------------------------------------------
  2. ;
  3. ; Установочный скрипт для Inno Setup 5.6.1
  4. ; для ПО ICTracker
  5. ; (c) Iscander Che, 26.07.2019
  6. ;
  7. ;------------------------------------------------------------------------------
  8.  
  9. ;------------------------------------------------------------------------------
  10. ; Определяем некоторые константы
  11. ;------------------------------------------------------------------------------
  12.  
  13. ; Имя приложения
  14. #define Name "ICTracker"
  15. ; Версия приложения
  16. #define Version "0.1"
  17. ; Фирма-разработчик
  18. #define Publisher "Iscander Che"
  19. ; Сафт фирмы разработчика
  20. #define URL "iscander.che@gmail.com"
  21. ; Имя исполняемого модуля
  22. #define ExeName "ICTracker.exe"
  23. ; Имя папки по умолчанию
  24. #define DirName "ICTracker"
  25. ; Корневой путь по умолчанию
  26. #define RootDir "G:\repos_wc"
  27.  
  28. ;------------------------------------------------------------------------------
  29. ; Параметры установки
  30. ;------------------------------------------------------------------------------
  31. [Setup]
  32.  
  33. ; Уникальный идентификатор приложения,
  34. ;сгенерированный через Tools -> Generate GUID
  35. AppId={{C73A79D0-8EDD-4AEE-9F14-4720AFF94765}
  36.  
  37. ; Прочая информация, отображаемая при установке
  38. AppName={#Name}
  39. AppVersion={#Version}
  40. AppPublisher={#Publisher}
  41. AppPublisherURL={#URL}
  42. AppSupportURL={#URL}
  43. AppUpdatesURL={#URL}
  44.  
  45. ; Путь установки по-умолчанию
  46. DefaultDirName={pf}\{#DirName}
  47. ; Имя группы в меню "Пуск"
  48. DefaultGroupName={#Name}
  49.  
  50. ; Каталог, куда будет записан собранный setup и имя исполняемого файла
  51. OutputDir={#RootDir}\{#DirName}\bin
  52. OutputBaseFileName={#Name}_v.{#Version}_setup
  53.  
  54. ; Файл иконки
  55. SetupIconFile={#RootDir}\{#DirName}\ICTrackerServer\images\ICTracker.ico
  56.  
  57. ; Параметры сжатия
  58. Compression=lzma
  59. SolidCompression=yes
  60.  
  61. ;------------------------------------------------------------------------------
  62. ; Устанавливаем языки для процесса установки
  63. ;------------------------------------------------------------------------------
  64. [Languages]
  65. Name: "english"; MessagesFile: "compiler:Default.isl"; LicenseFile: "License_ENG.txt"
  66. Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "License_RUS.txt"
  67.  
  68. ;------------------------------------------------------------------------------
  69. ; Опционально - некоторые задачи, которые надо выполнить при установке
  70. ;------------------------------------------------------------------------------
  71. [Tasks]
  72. ; Создание иконки на рабочем столе
  73. Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
  74.  
  75.  
  76. ;------------------------------------------------------------------------------
  77. ; Файлы, которые надо включить в пакет установщика
  78. ;------------------------------------------------------------------------------
  79. [Files]
  80.  
  81. ; Исполняемый файл
  82. Source: "{#RootDir}\{#DirName}\build\release\{#Name}Server.exe"; DestDir: "{app}"; Flags: ignoreversion
  83.  
  84. ; Прилагающиеся ресурсы
  85. Source: "{#RootDir}\{#DirName}\build\release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
  86.  
  87. ;------------------------------------------------------------------------------
  88. ; Указываем установщику, что иконки он должен взять из исполняемого файла
  89. ;------------------------------------------------------------------------------
  90. [Icons]
  91.  
  92. Name: "{group}\{#Name}"; Filename: "{app}\{#ExeName}"
  93.  
  94. Name: "{commondesktop}\{#Name}"; Filename: "{app}\{#ExeName}"; Tasks: desktopicon
  95.  
  96. ;------------------------------------------------------------------------------
  97. ; Удаление ключей реестра при деинсталляции приложения
  98. ;------------------------------------------------------------------------------
  99. [Registry]
  100.  
  101. 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) добавить к набору файлов дистрибутива текст лицензии.

  1. rem makebin.bat
  2.  
  3. del /q build\release\Test_*.*
  4. copy license\LICENSE_GPL.txt build\release
  5. "%path_to_soft%\InnoSetup5\iscc" setup.iss

Всё, сборка готова к использованию. Теперь остаются только функциональные тесты и введение в опытную эксплуатацию.

Итоги

Функциональные требования выполнены, архитектура изменениям не подвергалась.

Небольшим изменения были внесены во внешний вид трекера из-за сложности взаимодействия с единственным выпадающим списком состояния задач. Был упрощён вид диалога создания проекта, остались только проекты без поддержки СКВ. Проекты с поддержкой СКВ подключаются и архивируются в автоматизированном режиме. Наименования ранее архивированных проектов не отмечаются буквой «(А)», так как при извлечении из архива проект автоматически становится активным.

Основные сложности были в разработке базы данных: две таблицы исключены из базы, в одной таблице добавлена колонка. На будущее надо это учесть и тщательнее подходить к формированию структуры базы данных (при необходимости её наличия).

Благодарю всех за внимание. На этом проект Simple Tracker завершён. Интересных проектов!

Мақала бойынша сұралады0сұрақтар(лар)

3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Evgenii Legotckoi
  • Там. 5, 2019, 3 Т.Қ.

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

IscanderChe
  • Там. 5, 2019, 4:02 Т.Қ.

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

Evgenii Legotckoi
  • Там. 5, 2019, 4:06 Т.Қ.

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

IscanderChe
  • Там. 5, 2019, 4:16 Т.Қ.

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

Evgenii Legotckoi
  • Там. 5, 2019, 4:17 Т.Қ.

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

IscanderChe
  • Там. 5, 2019, 4:23 Т.Қ.

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

Evgenii Legotckoi
  • Там. 5, 2019, 4:26 Т.Қ.

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

IscanderChe
  • Там. 5, 2019, 4:59 Т.Қ.

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

Evgenii Legotckoi
  • Там. 5, 2019, 5:01 Т.Қ.

Open Source и есть Community ))

IscanderChe
  • Там. 5, 2019, 5:05 Т.Қ.

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

Evgenii Legotckoi
  • Там. 5, 2019, 5:34 Т.Қ.

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

IscanderChe
  • Жел. 26, 2019, 1:04 Т.Ж.

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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз