Files
umbrix/update-server/WINDOWS_BUILD_INSTRUCTIONS.md

208 lines
7.0 KiB
Markdown
Raw Normal View History

# 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
-**Автопроверка** - при запуске для всех платформ
-**Автоперезагрузка** - после установки для всех платформ