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