Files
umbrix/update-server/WINDOWS_BUILD_INSTRUCTIONS.md
Umbrix Developer 796c223d44
Some checks failed
CI / run (push) Has been cancelled
feat: Windows support - auto-update system + proper app icon
- 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
2026-01-19 17:48:21 +03:00

7.0 KiB
Raw Blame History

Windows Build & Update Instructions

Система автообновлений для Windows

Требования для Windows EXE сборки

  1. Inno Setup - для создания установщика

  2. 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. Автоматическая установка

При нажатии "Обновить":

  1. Скачивание - файл загружается в %TEMP%\umbrix-1.7.3.exe
  2. Установка - запускается через PowerShell:
    Start-Process -FilePath "umbrix-1.7.3.exe" `
      -ArgumentList "/VERYSILENT", "/SUPPRESSMSGBOXES", "/NORESTART" `
      -Verb RunAs -Wait
    
  3. Перезапуск - приложение автоматически перезапускается через 2 секунды

Параметры тихой установки Inno Setup

  • /VERYSILENT - установка без UI
  • /SUPPRESSMSGBOXES - без диалоговых окон
  • /NORESTART - не перезагружать систему
  • -Verb RunAs - запрос прав администратора (UAC)

Тестирование

  1. Соберите версию 1.7.0
  2. Установите: umbrix-1.7.0-windows-setup.exe
  3. Соберите версию 1.7.3, загрузите в Gitea
  4. Запустите приложение 1.7.0
  5. Должно появиться уведомление об обновлении
  6. Нажмите "Обновить" → автоустановка → автоперезапуск

Troubleshooting

Ошибка: "PowerShell не найден"

  • PowerShell должен быть установлен (входит в Windows)
  • Проверьте: powershell --version

Ошибка: "Access denied"

  • Установщик требует прав администратора
  • UAC запросит подтверждение

Установка не запускается автоматически

  • Проверьте антивирус - может блокировать
  • Запустите вручную скачанный .exe

Альтернатива: MSI установщик

Если нужен MSI вместо EXE:

  1. Используйте WiX Toolset: https://wixtoolset.org/
  2. Создайте .wxs файл с описанием установки
  3. Скомпилируйте: candle installer.wxs && light installer.wixobj
  4. Результат: umbrix-1.7.3.msi
  5. Установка: 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
  • Автопроверка - при запуске для всех платформ
  • Автоперезагрузка - после установки для всех платформ