Files
umbrix/update-server/WINDOWS_PORTABLE_ZIP.md
Umbrix Developer 4615b1da51 docs: Add Windows Portable ZIP update guide
Complete documentation for creating portable ZIP updates:
- No UAC prompts needed
- No SmartScreen warnings
- Perfect for testing without code signing
- Fallback to EXE installer if ZIP not available
- Step-by-step build and release instructions
2026-01-20 10:56:16 +03:00

7.9 KiB
Raw Blame History

Creating Portable ZIP Update for Windows

Преимущества Portable ZIP

  • Без UAC - не нужны права администратора
  • Без SmartScreen - Windows не показывает предупреждения для ZIP файлов
  • Быстрое обновление - просто заменить файлы
  • Идеально для тестирования без подписи кода
  • Fallback на .exe если .zip не найден

📦 Создание Portable ZIP (на Windows)

Шаг 1: Собрать Release версию

cd "C:\Umbrix\project.exe.umbrix 1.7.3\umbrix"

# Собрать Flutter app
flutter build windows --release

# Результат: build\windows\x64\runner\Release\

Шаг 2: Упаковать в ZIP

# Путь к build папке
$buildPath = "build\windows\x64\runner\Release"

# Создать ZIP архив
$zipName = "umbrix-1.7.5-portable-windows-x64.zip"
Compress-Archive -Path "$buildPath\*" -DestinationPath $zipName -Force

# Проверить размер (~50-60MB)
Get-Item $zipName | Select-Object Name, Length

Шаг 3: Создать релиз в Gitea

# Создать релиз v1.7.5
$token = "bfe5806ebda0adb22815154c81f25057f02a3dde"
$body = @{
    tag_name = "v1.7.5"
    name = "Umbrix v1.7.5 (Portable Test)"
    body = @"
**Test release with portable ZIP update**

✅ Windows Portable ZIP (no UAC, no SmartScreen!)  
✅ Auto-update test: 1.7.4 → 1.7.5  
✅ EXE installer also available

**Download:**
- **umbrix-1.7.5-portable-windows-x64.zip** - Recommended for testing (no warnings!)
- umbrix-1.7.5-windows-setup-x64.exe - Full installer (requires UAC)
"@
    draft = $false
    prerelease = $false
} | ConvertTo-Json

$response = Invoke-RestMethod -Uri "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases" `
  -Method Post `
  -Headers @{"Authorization"="token $token"; "Content-Type"="application/json"} `
  -Body $body

$releaseId = $response.id
Write-Host "Release created with ID: $releaseId"

Шаг 4: Загрузить ZIP

$releaseId = 5  # From previous step
$zipFile = "umbrix-1.7.5-portable-windows-x64.zip"
$token = "bfe5806ebda0adb22815154c81f25057f02a3dde"

# Upload
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/$releaseId/assets?name=$zipFile" `
  -H "Authorization: token $token" `
  -H "Content-Type: application/zip" `
  --data-binary "@$zipFile"

🧪 Тестирование Auto-Update

1. Установить старую версию (1.7.4)

# Распаковать 1.7.4 в папку
$oldVersion = "C:\Umbrix\Test\umbrix-1.7.4"
Expand-Archive -Path "umbrix-1.7.4-portable-windows-x64.zip" -DestinationPath $oldVersion

# Запустить
cd $oldVersion
.\umbrix.exe

2. Проверить автообновление

Что происходит:

  1. Приложение запускается (версия 1.7.4)
  2. Через 5 секунд: уведомление "Доступна новая версия 1.7.5"
  3. Нажать кнопку "Обновить"
  4. Начинается загрузка umbrix-1.7.5-portable-windows-x64.zip
  5. БЕЗ UAC запроса!
  6. БЕЗ SmartScreen предупреждений!
  7. Показывается toast: "Установка обновления из ZIP..."
  8. ZIP распаковывается в %TEMP%\umbrix_update_xxxxx
  9. Создается batch скрипт для замены файлов
  10. Приложение закрывается
  11. Скрипт ждет 3 секунды, заменяет файлы, запускает приложение
  12. Готово! Версия 1.7.5 запущена

3. Проверить версию

Настройки → О программе → Версия: 1.7.5

🔄 Логика выбора обновления

Приоритет (в коде):

  1. Ищем .zip файл с patterns: portable, windows, win
  2. Если .zip найден → используем ZIP (без UAC!)
  3. Если .zip НЕ найден → fallback на .exe (с UAC)

Пример файлов в релизе:

✅ umbrix-1.7.5-portable-windows-x64.zip  ← Будет использован (приоритет!)
   umbrix-1.7.5-windows-setup-x64.exe    ← Запасной вариант

📂 Структура ZIP архива

umbrix-1.7.5-portable-windows-x64.zip
├── umbrix.exe                  (главный EXE)
├── data/                       (Flutter ресурсы)
│   ├── app.so
│   ├── icudtl.dat
│   └── flutter_assets/
├── flutter_windows.dll         (Flutter engine)
├── libcore.dll                 (VPN core, 45MB)
└── другие .dll файлы

Быстрая команда (все в одном)

cd "C:\Umbrix\project.exe.umbrix 1.7.3\umbrix"

# Собрать
flutter build windows --release

# Упаковать
$version = "1.7.5"
$zipName = "umbrix-$version-portable-windows-x64.zip"
Compress-Archive -Path "build\windows\x64\runner\Release\*" -DestinationPath $zipName -Force

# Проверить
Get-Item $zipName | Select-Object Name, @{N="Size (MB)";E={[math]::Round($_.Length/1MB, 2)}}

💡 Советы

Для разработки:

  • Используйте Portable ZIP - быстрее тестировать
  • Нет задержек от UAC и SmartScreen
  • Можно создавать релизы каждые 5 минут

Для production:

  • Portable ZIP для пользователей без админ прав
  • EXE installer для "правильной" установки в Program Files
  • Рекомендуется оба варианта в релизе!

Размеры:

  • Portable ZIP: ~50MB (сжатый)
  • EXE installer: ~60MB (Inno Setup добавляет ~10MB)

🎯 Преимущества двух вариантов

Аспект Portable ZIP EXE Installer
UAC запрос Нет Требуется
SmartScreen Не показывается ⚠️ Показывается (без подписи)
Права админа Не нужны Нужны
Скорость обновления Очень быстро ⏱️ Медленнее
Установка в Program Files Нет Да
Ярлыки в меню Пуск Нет Да
Удаление через "Программы и компоненты" Нет Да
Портативность Да (можно на флешке) Нет

📝 Рекомендации

Для тестирования (БЕЗ подписи кода):

✅ Используйте Portable ZIP
✅ Быстрое тестирование
✅ Нет предупреждений Windows

Для production (С подписью кода):

Оба варианта в релизе
✅ EXE для установки
✅ ZIP для обновлений

Пример релиза:

v1.7.5 - Umbrix Release
├── umbrix-1.7.5-portable-windows-x64.zip (для обновлений)
└── umbrix-1.7.5-windows-setup-x64.exe    (для новых установок)

Итого

Добавлена поддержка Portable ZIP:

  • Код проверяет .zip → fallback на .exe
  • ZIP распаковывается и заменяет файлы
  • Без UAC, без SmartScreen
  • Идеально для тестирования!

Теперь 2 способа обновления на Windows:

  1. Portable ZIP (рекомендуется для тестирования)
  2. EXE Installer (для production)