Добавить в корзинуПозвонить
Найти в Дзене
Евгений Дергунов

Создание обновления для установленной программы

Спасибо Вопиловскому Артему за предоставленный материал для статьи Допустим была создана программа простого калькулятора в среде разработки Pycharm и теперь необходимо сделать установщик программы для операционной системы Windows, который будет проверять версию установленной программы (рис. 1). Создание установщика в Windows на примере программы калькулятор приведено в видео Установщик будет создан с помощью программы Inno Setup. Что для этого нужно? Заранее нужно подготовить значок, который будет являться иконкой программы. Для начала нужно создать name.exe файл созданной программы. Для этого в Pycharm нужно зайти в терминал и установить pyinstaller, с помощью команды pip install pyinstaller. После установки необходимо написать команду в следующем формате (рис. 2): pyinstaller -i”путь до иконки” “путь до .py файла” –noconsole В результате в корне проекта появится папка dist с исполняемым файлом программы. В папку к name.exe файлу нужно также перенести иконку программы (рис. 3). После

Спасибо Вопиловскому Артему за предоставленный материал для статьи

Допустим была создана программа простого калькулятора в среде разработки Pycharm и теперь необходимо сделать установщик программы для операционной системы Windows, который будет проверять версию установленной программы (рис. 1).

Рисунок 1
Рисунок 1

Создание установщика в Windows на примере программы калькулятор приведено в видео

Установщик будет создан с помощью программы Inno Setup.

Что для этого нужно?

Заранее нужно подготовить значок, который будет являться иконкой программы.

Для начала нужно создать name.exe файл созданной программы. Для этого в Pycharm нужно зайти в терминал и установить pyinstaller, с помощью команды pip install pyinstaller.

После установки необходимо написать команду в следующем формате (рис. 2):

pyinstaller -iпуть до иконки” “путь до .py файла–noconsole

Рисунок 2
Рисунок 2

В результате в корне проекта появится папка dist с исполняемым файлом программы. В папку к name.exe файлу нужно также перенести иконку программы (рис. 3).

Рисунок 3
Рисунок 3

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

Запускаем программу Inno setup и выбираем пункт «Create a new empty script file» (Создать новый пустой скрипт файл). Установщик можно сделать и с помощью конструктора, однако, если нужно сделать проверку на версию установленной на компьютере программы, то придется писать скрипт самостоятельно (рис. 4).

Рисунок 4
Рисунок 4

Чтобы получить id программы нужно нажать Generate GUID в Tools и потом вставить его в код (рис. 5).

Рисунок 5
Рисунок 5

Далее приведен код установщика с комментариями:

; Определение констант для имени программы, версии, издателя и исполняемого файла

#define MyAppName "Калькулятор" ; Имя приложения

#define MyAppVersion "1.0" ; Версия приложения

#define MyAppPublisher "Иванов Иван Иванович" ; Издатель приложения

#define MyAppExeName "main.exe" ; Имя основного исполняемого файла

[Setup]

AppId={{539C2B88-B0E3-4585-933C-27C64447F4DA}} ; Уникальный идентификатор приложения

AppName={#MyAppName} ; Имя приложения, используется в заголовках и папках установки

AppVersion={#MyAppVersion} ; Версия приложения

AppPublisher={#MyAppPublisher}; Имя издателя, отображается в информации об установленной программе

DefaultDirName={autopf}\{#MyAppName} ; Каталог установки по умолчанию, в Program Files

ArchitecturesAllowed=x64compatible ; Разрешенные архитектуры: 64-разрядные или совместимые

ArchitecturesInstallIn64BitMode=x64compatible ; Установка в режиме 64-бит для совместимых архитектур

DisableProgramGroupPage=yes

LicenseFile=C:\Users\Admin\Desktop\Лицензия.txt ; Путь к файлу лицензии, показывается во время установки

PrivilegesRequired=lowest ; Минимальные привилегии для установки, подходит для обычных пользователей

PrivilegesRequiredOverridesAllowed=dialog ; Разрешение для показа диалога при необходимости повышения прав

OutputDir=C:\Users\Admin\Documents ; Каталог, куда будет сохранен скомпилированный установщик

OutputBaseFilename=СalculatorApp64 ; Имя файла установщика

SetupIconFile=C:\Users\Admin\PycharmProjects\pythonProject1\dist\main\calculator.ico ; Иконка установщика

Compression=lzma ; Используемый метод сжатия: LZMA

SolidCompression=yes ; Включает сжатие для уменьшения размера установщика

WizardStyle=modern ; Используется современный стиль мастера установки

[Registry]

; Создание записи в реестре для указания версии установленного приложения

Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}"; ValueType: string; ValueName: "DisplayVersion"; ValueData: "{#MyAppVersion}"; Flags: uninsdeletevalue

[Languages]

Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]

; Задача для создания ярлыка на рабочем столе

Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]

; Основной исполняемый файл программы

Source: "C:\Users\Admin\PycharmProjects\pythonProject1\dist\main\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion

; Все файлы из указанного каталога

Source: "C:\Users\Admin\PycharmProjects\pythonProject1\dist\main\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]

; Создание ярлыка в меню "Пуск"

Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

; Создание ярлыка на рабочем столе

Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]

; Автоматический запуск приложения после установки

Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Code]

; Проверка версии программы перед установкой

function InitializeSetup(): Boolean;

var

CurrentVersion: String;

begin

Result := True; ;

; Чтение текущей версии программы из реестра

if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + '{#MyAppName}', 'DisplayVersion', CurrentVersion) then

begin

; Если текущая версия больше или равна устанавливаемой, показываем сообщение

if CurrentVersion > '{#MyAppVersion}' then

begin

MsgBox(Format('Уже установлена более новая версия: ', [ExpandConstant('{#MyAppName}'), CurrentVersion]), mbInformation, MB_OK);

Result := False; ; Отменяем установку

end;

end;

end;

В результате выполнения скрипта установщик программы появится в папке «Документы».

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

Если необходимо обновить программу (что-то изменить, добавить функционал и т.п.), то нужно заново создать исполняемый файл в Pycharmи установщик, только в коде для создания установщика вписать уже новую версию программы, например, 1.1.

В результате, если установить программу версии 1.1, а после чего попытаться установить программу с версией 1.0, то появится сообщение с ошибкой (рис. 6).

Рисунок 6
Рисунок 6

Таким образом программу с более старой версией установить не получится. Если потребуется работа с более старой версией, то сначала нужно будет удалить штатными способами новую версию.