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
This commit is contained in:
247
update-server/WINDOWS_PORTABLE_ZIP.md
Normal file
247
update-server/WINDOWS_PORTABLE_ZIP.md
Normal file
@@ -0,0 +1,247 @@
|
||||
# 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"
|
||||
|
||||
# Создать 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
|
||||
|
||||
```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 - быстрее тестировать
|
||||
- ✅ Нет задержек от 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)
|
||||
Reference in New Issue
Block a user