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

208 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Windows Build & Update Instructions
## Система автообновлений для Windows
### Требования для Windows EXE сборки
1. **Inno Setup** - для создания установщика
- Скачать: https://jrsoftware.org/isdl.php
- Версия: 6.x или новее
2. **Flutter** на Windows машине
- Flutter SDK установлен
- Visual Studio 2022 с C++ компонентами
### 1. Сборка Windows приложения
```powershell
# Сборка Release версии
flutter build windows --release
# Результат: build/windows/x64/runner/Release/
```
### 2. Создание Inno Setup скрипта
Создайте файл `windows/installer.iss`:
```inno
#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. Компиляция установщика
```powershell
# В папке windows/
iscc installer.iss
# Результат: dist/umbrix-1.7.3-windows-setup.exe
```
### 4. Загрузка в Gitea
```powershell
# Загрузка в релиз через 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:
```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:
```yaml
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
-**Автопроверка** - при запуске для всех платформ
-**Автоперезагрузка** - после установки для всех платформ