# Creating Portable ZIP Update for Windows ## ✅ Преимущества Portable ZIP - **Без UAC** - не нужны права администратора - **Без SmartScreen** - Windows не показывает предупреждения для ZIP файлов - **Быстрое обновление** - просто заменить файлы - **Идеально для тестирования** без подписи кода - **Fallback на .exe** если .zip не найден --- ## 📦 Создание Portable ZIP (на Windows) ### Шаг 1: Собрать Release версию ```powershell cd "C:\Umbrix\project.exe.umbrix 1.7.3\umbrix" # Собрать Flutter app flutter build windows --release # Результат: build\windows\x64\runner\Release\ ``` ### Шаг 2: Упаковать в ZIP ```powershell # Путь к build папке $buildPath = "build\windows\x64\runner\Release" # ✨ НОВОЕ: Добавить файлы для пользователей Copy-Item "windows\packaging\portable\README.txt" -Destination "$buildPath\" -Force Copy-Item "windows\packaging\portable\Запустить Umbrix.bat" -Destination "$buildPath\" -Force # Создать 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 Write-Host "`n✅ ZIP содержит:" -ForegroundColor Green Write-Host " • README.txt (инструкция - ПЕРВЫЙ файл в списке)" -ForegroundColor Cyan Write-Host " • Запустить Umbrix.bat (удобный запуск)" -ForegroundColor Cyan Write-Host " • Umbrix.exe (основное приложение)" -ForegroundColor Yellow Write-Host " • UmbrixCli.exe (служебная утилита)" -ForegroundColor Gray Write-Host " • Все DLL и папки" -ForegroundColor Gray ``` ### Шаг 3: Создать релиз в Gitea ```powershell # Создать релиз 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 ```powershell $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) ```powershell # Распаковать 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 файлы ``` --- ## ⚡ Быстрая команда (все в одном) ```powershell 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 (что видят пользователи) Когда пользователь распакует ZIP, он увидит: ``` umbrix-portable/ ├── 📄 README.txt ⭐ ПЕРВЫЙ в списке - инструкция! ├── 🚀 Запустить Umbrix.bat ⭐ Удобный способ запуска ├── 📱 Umbrix.exe ⭐ Основное приложение (267 KB) ├── ⚙️ UmbrixCli.exe ⚠️ Служебная утилита (1.8 MB) ├── 1.7.4/ 📂 Папка с данными ├── data/ 📂 Ресурсы Flutter ├── dynamic_color_plugin.dll 🔧 DLL плагины ├── flutter_windows.dll 🔧 Flutter (17 MB) ├── libcore.dll 🔧 Либкор (45 MB) └── ...другие DLL... ``` **Почему пользователи не запутаются:** 1. ✅ **README.txt** - первый файл (по алфавиту), ясная инструкция 2. ✅ **Запустить Umbrix.bat** - второй файл, понятное название 3. ✅ **Umbrix.exe** с красивой иконкой - визуально выделяется 4. ⚠️ **UmbrixCli.exe** - название намекает что это утилита командной строки --- ## �💡 Советы **Для разработки:** - ✅ Используйте 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)