Files
umbrix/update-server/WINDOWS_BUILD_INSTRUCTIONS.md
Umbrix Developer 8d55a2629c Update Windows build docs: recommend flutter_distributor
- Added link to WINDOWS_DISTRIBUTOR_BUILD.md at the top
- Clarified that manual Inno Setup is alternative method
- flutter_distributor is now the primary recommended approach
2026-01-19 20:39:34 +03:00

231 lines
8.1 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
## ⚡ РЕКОМЕНДУЕТСЯ: flutter_distributor (автоматическая упаковка)
**Используйте [WINDOWS_DISTRIBUTOR_BUILD.md](WINDOWS_DISTRIBUTOR_BUILD.md)** для автоматической сборки через flutter_distributor.
Преимущества:
-**Один .exe файл** вместо папки с множеством файлов
- ✅ Автоматическая упаковка через Inno Setup
-Та же команда, что для Linux (deb/rpm/appimage)
- ✅ Готовый конфиг уже настроен в `windows/packaging/exe/`
**Команда:**
```powershell
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
```
**Результат:** `dist/1.7.3+173/umbrix-setup-x64.exe` (~60MB) - готов к загрузке!
---
## Альтернатива: Ручная сборка через Inno Setup
Используйте этот метод только если flutter_distributor не работает.
## Система автообновлений для 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
-**Автопроверка** - при запуске для всех платформ
-**Автоперезагрузка** - после установки для всех платформ