Some checks failed
CI / run (push) Has been cancelled
- PowerShell silent installer with UAC elevation - Smart asset detection (x64 priority for .exe) - Cross-platform restart after update - Auto-check updates on launch (5 sec delay) - Multi-layer .ico with 6 sizes (16-256px) - Windows build documentation added
7.0 KiB
7.0 KiB
Windows Build & Update Instructions
Система автообновлений для Windows
Требования для Windows EXE сборки
-
Inno Setup - для создания установщика
- Скачать: https://jrsoftware.org/isdl.php
- Версия: 6.x или новее
-
Flutter на Windows машине
- Flutter SDK установлен
- Visual Studio 2022 с C++ компонентами
1. Сборка Windows приложения
# Сборка Release версии
flutter build windows --release
# Результат: build/windows/x64/runner/Release/
2. Создание Inno Setup скрипта
Создайте файл windows/installer.iss:
#define MyAppName "Umbrix"
#define MyAppVersion "1.7.3"
#define MyAppPublisher "Umbrix Team"
#define MyAppURL "https://umbrix.net"
#define MyAppExeName "umbrix.exe"
[Setup]
AppId={{YOUR-GUID-HERE}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=..\dist
OutputBaseFilename=umbrix-{#MyAppVersion}-windows-setup
Compression=lzma2/max
SolidCompression=yes
PrivilegesRequired=admin
ArchitecturesInstallIn64BitMode=x64
; Параметры для тихой установки (поддержка автообновления)
[Code]
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
begin
// Закрыть запущенное приложение перед установкой
if FileExists(ExpandConstant('{autopf}\{#MyAppName}\{#MyAppExeName}')) then
begin
Exec('taskkill', '/F /IM umbrix.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;
Result := True;
end;
[Files]
Source: "..\build\windows\x64\runner\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "Launch {#MyAppName}"; Flags: nowait postinstall skipifsilent
3. Компиляция установщика
# В папке windows/
iscc installer.iss
# Результат: dist/umbrix-1.7.3-windows-setup.exe
4. Загрузка в Gitea
# Загрузка в релиз через API
$token = "YOUR_GITEA_TOKEN"
$file = "dist/umbrix-1.7.3-windows-setup.exe"
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/1/assets?name=umbrix-1.7.3-windows-setup.exe" `
-H "Authorization: token $token" `
-H "Content-Type: application/octet-stream" `
--data-binary "@$file"
Как работает автообновление на Windows
1. Автопроверка при запуске
- Приложение проверяет обновления через 5 секунд после запуска
- Запрос к API:
https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases
2. Обнаружение обновления
- Парсит JSON с assets
- Ищет файл с расширением
.exe - Показывает диалог "Доступно обновление"
3. Автоматическая установка
При нажатии "Обновить":
- Скачивание - файл загружается в
%TEMP%\umbrix-1.7.3.exe - Установка - запускается через PowerShell:
Start-Process -FilePath "umbrix-1.7.3.exe" ` -ArgumentList "/VERYSILENT", "/SUPPRESSMSGBOXES", "/NORESTART" ` -Verb RunAs -Wait - Перезапуск - приложение автоматически перезапускается через 2 секунды
Параметры тихой установки Inno Setup
/VERYSILENT- установка без UI/SUPPRESSMSGBOXES- без диалоговых окон/NORESTART- не перезагружать систему-Verb RunAs- запрос прав администратора (UAC)
Тестирование
- Соберите версию 1.7.0
- Установите:
umbrix-1.7.0-windows-setup.exe - Соберите версию 1.7.3, загрузите в Gitea
- Запустите приложение 1.7.0
- Должно появиться уведомление об обновлении
- Нажмите "Обновить" → автоустановка → автоперезапуск
Troubleshooting
Ошибка: "PowerShell не найден"
- PowerShell должен быть установлен (входит в Windows)
- Проверьте:
powershell --version
Ошибка: "Access denied"
- Установщик требует прав администратора
- UAC запросит подтверждение
Установка не запускается автоматически
- Проверьте антивирус - может блокировать
- Запустите вручную скачанный
.exe
Альтернатива: MSI установщик
Если нужен MSI вместо EXE:
- Используйте WiX Toolset: https://wixtoolset.org/
- Создайте
.wxsфайл с описанием установки - Скомпилируйте:
candle installer.wxs && light installer.wixobj - Результат:
umbrix-1.7.3.msi - Установка:
msiexec /i umbrix-1.7.3.msi /qn(silent)
Continuous Integration
Для автоматизации сборки Windows версии на GitHub Actions:
name: Build Windows
on:
push:
tags:
- 'v*'
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.0'
- name: Build Windows
run: flutter build windows --release
- name: Download Inno Setup
run: |
Invoke-WebRequest -Uri "https://jrsoftware.org/download.php/is.exe" -OutFile "inno-setup.exe"
./inno-setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
- name: Build Installer
run: iscc windows/installer.iss
- name: Upload to Gitea
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
$file = "dist/umbrix-${{ github.ref_name }}-windows-setup.exe"
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/assets" `
-H "Authorization: token $env:GITEA_TOKEN" `
--data-binary "@$file"
Заключение
Теперь система автообновлений работает одинаково на:
- ✅ Linux - DEB пакеты через
apt install - ✅ Windows - EXE установщики через PowerShell
- ✅ Автопроверка - при запуске для всех платформ
- ✅ Автоперезагрузка - после установки для всех платформ