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