11 Commits
1.7.4 ... 1.7.6

Author SHA1 Message Date
Umbrix Developer
b628bfcd82 feat: Add README and launch script for Windows Portable ZIP
Some checks failed
CI / run (push) Has been cancelled
- Add README.txt with clear instructions (first file alphabetically)
- Add 'Запустить Umbrix.bat' for easy launch
- Update WINDOWS_PORTABLE_ZIP.md with file structure explanation
- Users won't be confused which file to run anymore
2026-01-20 11:56:28 +03:00
Umbrix Admin
6c31f8eeb2 Update appcast.xml: use portable-windows filename
Some checks are pending
Release / build-release (push) Waiting to run
2026-01-20 11:03:43 +03:00
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
Umbrix Developer
597d9f59ae feat: Add portable ZIP update for Windows
Some checks failed
CI / run (push) Has been cancelled
Two update methods now available:
1. EXE installer (requires UAC, shows SmartScreen without signature)

Changes:
- Added .zip asset detection with priority (portable/windows/win)
- ZIP auto-install: extract → replace files → restart
- Priority: .zip → .exe (portable first for better UX)
- Batch script handles file replacement after app closes
- No administrator rights needed for ZIP updates

Benefits of ZIP:
 No UAC prompts
 No SmartScreen warnings
 Fast updates (just file replacement)
 Perfect for testing without code signing
 Fallback to .exe if .zip not available
2026-01-20 10:55:14 +03:00
Umbrix Admin
cd5b3493a2 Update appcast.xml: use Portable.zip for v1.7.5 2026-01-20 10:06:10 +03:00
Umbrix Admin
036faf58c9 Release v1.7.5: Complete Umbrix branding
Some checks failed
CI / run (push) Has been cancelled
- Updated version to 1.7.5+175
- UmbrixCli.exe now has Umbrix icon (libcore v1.7.1)
- Updated appcast.xml for auto-update testing
- All Hiddify branding replaced with Umbrix
2026-01-20 09:43:41 +03:00
Umbrix Developer
28fed0c8a0 Update libcore submodule: Add Umbrix CLI icon
Some checks failed
CI / run (push) Has been cancelled
Upload store MSIX to release / upload-store-msix-to-release (push) Has been cancelled
- libcore now at commit 6dfe63e
- HiddifyCli.exe uses umbrix-cli.ico (207KB multi-layer)
- Replaces hiddify branding in Windows CLI tool
2026-01-20 07:45:45 +03:00
Umbrix Developer
c27dfbfba7 Add Windows build cheat sheet
Some checks failed
Upload store MSIX to release / upload-store-msix-to-release (push) Has been cancelled
Quick reference for building Windows installer:
- 4 simple commands to build .exe
- Upload to Gitea instructions
- Testing auto-update process
- Troubleshooting common errors
- Links to detailed documentation
2026-01-19 20:40:39 +03:00
Umbrix Developer
8d55a2629c Update Windows build docs: recommend flutter_distributor
- Added link to WINDOWS_DISTRIBUTOR_BUILD.md at the top
- Clarified that manual Inno Setup is alternative method
- flutter_distributor is now the primary recommended approach
2026-01-19 20:39:34 +03:00
Umbrix Developer
67292b2697 Add Windows code signing documentation
Some checks failed
CI / run (push) Has been cancelled
- Detailed guide for obtaining code signing certificates
- Comparison of EV vs standard Code Signing certificates
- Provider pricing: DigiCert, Sectigo, Certum
- Instructions for signing .exe with signtool
- GitHub Actions automation examples
- FAQ: can work without certificate (shows warning but works)
2026-01-19 20:37:12 +03:00
Umbrix Developer
491feb04ac Configure flutter_distributor for Windows .exe installer
- Updated make_config.yaml: Umbrix branding, app_id, executable name
- Updated inno_setup.sas: umbrix.exe process termination
- Added WINDOWS_DISTRIBUTOR_BUILD.md: Complete build instructions
- flutter_distributor packages everything into single .exe file (~60MB)
- Result: umbrix-setup-x64.exe ready for Gitea release
2026-01-19 20:36:17 +03:00
15 changed files with 1193 additions and 48 deletions

View File

@@ -3,11 +3,31 @@
<channel>
<title>Umbrix Updates</title>
<description>Umbrix VPN автообновления</description>
<link>http://localhost:8000</link>
<link>https://update.umbrix.net</link>
<language>ru</language>
<!-- Пример структуры для обновления версии 2.5.8 -->
<!-- Раскомментируйте и измените, когда будет новая версия -->
<!-- Версия 1.7.5 - тестовое обновление -->
<item>
<title>Umbrix 1.7.5</title>
<description>🎨 Брендинг обновлён:
- Заменена иконка CLI на Umbrix
- Переименован HiddifyCli.exe → UmbrixCli.exe
- Улучшена стабильность</description>
<pubDate>Mon, 20 Jan 2026 09:30:00 +0000</pubDate>
<sparkle:version>1.7.5</sparkle:version>
<sparkle:shortVersionString>1.7.5</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>1.0.0</sparkle:minimumSystemVersion>
<!-- Windows Portable ZIP (no UAC, no SmartScreen!) -->
<enclosure
url="https://update.umbrix.net/vodorod/umbrix/releases/download/v1.7.5/umbrix-1.7.5-portable-windows-x64.zip"
sparkle:version="1.7.5"
sparkle:os="windows"
type="application/zip"
length="38653952" />
</item>
<!-- Пример структуры для будущих обновлений -->
<!--
<item>
<title>Umbrix 2.5.8</title>

View File

@@ -38,23 +38,41 @@ class RemoteVersionEntity with _$RemoteVersionEntity {
return null;
}
// Для Windows - ищем .exe с приоритетом x64
if (extension == '.exe') {
// Сначала ищем x64 setup/installer
for (final pattern in ['x64', 'amd64', 'win64', 'setup', 'installer']) {
try {
final asset = assets.firstWhere(
(asset) => asset.name.toLowerCase().contains(pattern) && asset.name.endsWith('.exe'),
);
return asset.downloadUrl;
} catch (_) {
continue;
// Для Windows - ищем .exe или .zip
if (extension == '.exe' || extension == '.zip') {
final targetExt = extension;
// Приоритет для zip: portable -> windows -> любой .zip
if (targetExt == '.zip') {
for (final pattern in ['portable', 'windows', 'win']) {
try {
final asset = assets.firstWhere(
(asset) => asset.name.toLowerCase().contains(pattern) && asset.name.endsWith('.zip'),
);
return asset.downloadUrl;
} catch (_) {
continue;
}
}
}
// Если не нашли специфичный - берём любой .exe
// Приоритет для exe: x64 setup/installer
if (targetExt == '.exe') {
for (final pattern in ['x64', 'amd64', 'win64', 'setup', 'installer']) {
try {
final asset = assets.firstWhere(
(asset) => asset.name.toLowerCase().contains(pattern) && asset.name.endsWith('.exe'),
);
return asset.downloadUrl;
} catch (_) {
continue;
}
}
}
// Если не нашли специфичный - берём любой с нужным расширением
try {
final asset = assets.firstWhere((asset) => asset.name.endsWith('.exe'));
final asset = assets.firstWhere((asset) => asset.name.endsWith(targetExt));
return asset.downloadUrl;
} catch (_) {
return null;

View File

@@ -73,9 +73,15 @@ class NewVersionDialog extends HookConsumerWidget with PresLogger {
// Определяем нужное расширение файла
String fileExt = '';
if (Platform.isWindows)
fileExt = '.exe';
else if (Platform.isMacOS)
if (Platform.isWindows) {
// Для Windows приоритет: .zip (portable) → .exe (installer)
// ZIP не требует UAC и подписи кода!
fileExt = '.zip';
final zipUrl = newVersion.findAssetByExtension('.zip');
if (zipUrl == null) {
fileExt = '.exe'; // Fallback на .exe если нет .zip
}
} else if (Platform.isMacOS)
fileExt = '.dmg';
else if (Platform.isLinux) fileExt = '.deb';
@@ -166,6 +172,84 @@ class NewVersionDialog extends HookConsumerWidget with PresLogger {
}
}
// Windows portable ZIP update
if (Platform.isWindows && fileExt == '.zip') {
try {
if (context.mounted) {
CustomToast('Установка обновления из ZIP...', type: AlertType.info).show(context);
}
// Получить путь к исполняемому файлу приложения
final exePath = Platform.resolvedExecutable;
final appDir = Directory(exePath).parent.path;
// Распаковать во временную папку
final tempDir = Directory('${Directory.systemTemp.path}\\umbrix_update_${DateTime.now().millisecondsSinceEpoch}');
await tempDir.create(recursive: true);
loggy.info('Extracting ZIP to: ${tempDir.path}');
// Распаковка через PowerShell
final extractResult = await Process.run(
'powershell',
[
'-Command',
'Expand-Archive',
'-Path',
'"$savePath"',
'-DestinationPath',
'"${tempDir.path}"',
'-Force'
],
);
if (extractResult.exitCode != 0) {
throw Exception('Failed to extract ZIP: ${extractResult.stderr}');
}
loggy.info('ZIP extracted successfully');
// Скрипт для замены файлов после закрытия приложения
final updateScript = '''
@echo off
echo Waiting for application to close...
timeout /t 3 /nobreak > nul
echo Updating files...
xcopy /E /Y "${tempDir.path}\\*" "$appDir\\"
echo Cleanup...
rmdir /S /Q "${tempDir.path}"
echo Starting application...
start "" "$exePath"
echo Update complete!
del "%~f0"
''';
final scriptPath = '${Directory.systemTemp.path}\\umbrix_update.bat';
await File(scriptPath).writeAsString(updateScript);
if (context.mounted) {
CustomToast.success('Обновление установлено! Приложение перезагрузится...').show(context);
context.pop();
}
// Запустить скрипт и закрыть приложение
await Process.start('cmd', ['/c', scriptPath], mode: ProcessStartMode.detached);
// Задержка перед выходом
Future.delayed(const Duration(seconds: 1), () {
exit(0);
});
return;
} catch (e) {
loggy.warning('Failed to install from ZIP: $e');
}
}
// Для других платформ или если автоустановка не сработала - просто открываем файл
final result = await OpenFile.open(savePath);

Submodule libcore updated: 8b6f4d6f20...6dfe63ea76

View File

@@ -1,7 +1,7 @@
name: umbrix
description: Cross Platform Multi Protocol Proxy Frontend.
publish_to: "none"
version: 1.7.3+173
version: 1.7.5+175
environment:
sdk: ">=3.3.0 <4.0.0"

View File

@@ -1,18 +1,46 @@
New-Item -ItemType Directory -Force -Name "dist\tmp"
New-Item -ItemType Directory -Force -Name "out"
# Umbrix Windows Packaging Script (based on Hiddify)
# Creates: Setup.exe + Portable.zip
# windows setup
# Get-ChildItem -Recurse -File -Path "dist" -Filter "*windows-setup.exe" | Copy-Item -Destination "dist\tmp\hiddify-next-setup.exe" -ErrorAction SilentlyContinue
# Compress-Archive -Force -Path "dist\tmp\hiddify-next-setup.exe",".github\help\mac-windows\*.url" -DestinationPath "out\hiddify-windows-x64-setup.zip"
Get-ChildItem -Recurse -File -Path "dist" -Filter "*windows-setup.exe" | Copy-Item -Destination "out\Hiddify-Windows-Setup-x64.exe" -ErrorAction SilentlyContinue
Get-ChildItem -Recurse -File -Path "dist" -Filter "*windows.msix" | Copy-Item -Destination "out\Hiddify-Windows-Setup-x64.msix" -ErrorAction SilentlyContinue
$Version = "1.7.5"
Write-Host "===============================================" -ForegroundColor Cyan
Write-Host " Umbrix Windows Packaging v$Version" -ForegroundColor Cyan
Write-Host "===============================================" -ForegroundColor Cyan
Write-Host ""
# windows portable
xcopy "build\windows\x64\runner\Release" "dist\tmp\hiddify-next" /E/H/C/I/Y
xcopy ".github\help\mac-windows\*.url" "dist\tmp\hiddify-next" /E/H/C/I/Y
Compress-Archive -Force -Path "dist\tmp\hiddify-next" -DestinationPath "out\Hiddify-Windows-Portable-x64.zip" -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Force -Name "dist\tmp" | Out-Null
New-Item -ItemType Directory -Force -Name "out" | Out-Null
Remove-Item -Path "$HOME\.pub-cache\git\cache\flutter_circle_flags*" -Force -Recurse -ErrorAction SilentlyContinue
# Windows Setup.exe (if exists in dist/)
Write-Host "[1/2] Checking for Setup.exe..." -ForegroundColor Yellow
$SetupExe = Get-ChildItem -Recurse -File -Path "dist" -Filter "*windows-setup.exe" -ErrorAction SilentlyContinue
if ($SetupExe) {
Copy-Item $SetupExe.FullName -Destination "out\Umbrix-Windows-Setup-x64.exe"
$size = [math]::Round((Get-Item "out\Umbrix-Windows-Setup-x64.exe").Length / 1MB, 2)
Write-Host "SUCCESS: Setup.exe copied: $size MB" -ForegroundColor Green
} else {
Write-Host "WARNING: Setup.exe not found (will create via Inno Setup)" -ForegroundColor Yellow
}
echo "Done"
# Windows Portable ZIP
Write-Host ""
Write-Host "[2/2] Creating Portable.zip..." -ForegroundColor Yellow
xcopy "build\windows\x64\runner\Release" "dist\tmp\umbrix-portable" /E/H/C/I/Y | Out-Null
Compress-Archive -Force -Path "dist\tmp\umbrix-portable" -DestinationPath "out\Umbrix-$Version-Windows-x64-Portable.zip"
$size = [math]::Round((Get-Item "out\Umbrix-$Version-Windows-x64-Portable.zip").Length / 1MB, 2)
Write-Host "SUCCESS: Portable.zip created: $size MB" -ForegroundColor Green
# Cleanup
Remove-Item -Path "dist\tmp" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host ""
Write-Host "===============================================" -ForegroundColor Cyan
Write-Host " PACKAGING COMPLETE!" -ForegroundColor Green
Write-Host "===============================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "Files in out/:" -ForegroundColor White
Get-ChildItem "out" -ErrorAction SilentlyContinue | ForEach-Object {
$filesize = [math]::Round($_.Length / 1MB, 2)
Write-Host " * $($_.Name) - $filesize MB" -ForegroundColor Gray
}
Write-Host ""

View File

@@ -0,0 +1,284 @@
# Подпись кода для Windows (Code Signing)
## Зачем нужен сертификат?
При установке `.exe` файла без цифровой подписи Windows показывает предупреждения:
- ⚠️ "Неизвестный издатель"
- ⚠️ "Windows защитила ваш компьютер"
- ⚠️ Windows Defender может блокировать файл
**С сертификатом:**
- ✅ "Проверенный издатель: Umbrix Team"
- ✅ Нет предупреждений SmartScreen
- ✅ Пользователи доверяют приложению
## Текущее состояние (БЕЗ сертификата)
Приложение **РАБОТАЕТ**, но:
1. При установке Windows показывает "Неизвестный издатель"
2. Пользователь должен нажать "Все равно запустить"
3. Антивирус может блокировать (ложное срабатывание)
**Для внутреннего использования это НОРМАЛЬНО**
## Где получить сертификат?
### 1. Коммерческие сертификаты (EV Code Signing)
**Recommended:** Extended Validation (EV) - сразу доверие Windows
| Провайдер | Цена/год | Особенности |
|-----------|----------|-------------|
| **DigiCert** | $469-799 | Лучшая репутация, EV на USB токене |
| **Sectigo (Comodo)** | $399-599 | Популярный, хорошая поддержка |
| **GlobalSign** | $349-599 | Быстрое получение (1-2 дня) |
| **SSL.com** | $299-499 | Дешевле, но дольше проверка |
| **Certum** | €199-399 | Европейский, принимают криптовалюту |
**EV сертификат (Extended Validation):**
- ✅ Сразу доверие Windows SmartScreen
- ✅ Зелёная подпись "Проверенный издатель"
- ✅ Никаких предупреждений
- 📦 Выдается на USB токене (нельзя скопировать)
- ⏱️ Проверка документов 3-7 дней
**Обычный Code Signing (не EV):**
- ⚠️ Доверие нарастает со временем (нужно минимум 100-1000 установок)
- ⚠️ Первые месяцы будут предупреждения SmartScreen
- 💾 Файл .pfx/.p12 (можно хранить локально)
- ⏱️ Получение 1-2 дня
### 2. Требования для получения
**Документы:**
- Регистрация компании (ИНН, ОГРН, выписка из ЕГРЮЛ)
- ИЛИ ИП (ОГРНИП)
- ИЛИ личность физлица (паспорт, утилиты)
**Проверка:**
- Подтверждение номера телефона
- Email компании (домен должен совпадать)
- Банковские реквизиты
- Адрес офиса (могут позвонить или прислать письмо с кодом)
### 3. Процесс получения (DigiCert EV пример)
```
1. Заказ → 2-3 минуты (онлайн форма)
2. Оплата → $799/год
3. Проверка документов → 3-7 дней
- Загрузка ЕГРЮЛ/паспорта
- Подтверждение телефона
- Проверка адреса
4. Отправка USB токена → 1-5 дней (DHL/FedEx)
5. Установка драйверов → 10 минут
6. Готово! Можно подписывать код
```
## Как подписать файл после получения сертификата
### С EV сертификатом (USB токен)
```powershell
# 1. Установить Windows SDK (включает signtool.exe)
# Скачать: https://developer.microsoft.com/windows/downloads/windows-sdk/
# 2. Подключить USB токен
# 3. Подписать EXE
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
& $signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "umbrix-1.7.3-windows-setup.exe"
# Результат:
# Successfully signed: umbrix-1.7.3-windows-setup.exe
```
### С обычным Code Signing (.pfx файл)
```powershell
# 1. Экспортировать сертификат в .pfx с паролем
# 2. Подписать EXE
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
& $signtool sign /f "umbrix-cert.pfx" /p "PASSWORD" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "umbrix-1.7.3-windows-setup.exe"
```
### Проверка подписи
```powershell
# Посмотреть информацию о подписи
$signtool verify /pa /v "umbrix-1.7.3-windows-setup.exe"
# Или через GUI: ПКМ → Свойства → Цифровые подписи
```
## Автоматизация с GitHub Actions
```yaml
name: Build & Sign Windows
on:
push:
tags: ['v*']
jobs:
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.0'
- name: Build Windows
run: flutter build windows --release
- name: Build Installer
run: iscc windows/installer.iss
# Для EV сертификата - использовать self-hosted runner с USB токеном
# Для обычного - загрузить .pfx в GitHub Secrets
- name: Sign EXE
env:
CERT_PASSWORD: ${{ secrets.CERT_PASSWORD }}
run: |
# Импорт .pfx из секрета
$cert = [Convert]::FromBase64String("${{ secrets.CERT_BASE64 }}")
[IO.File]::WriteAllBytes("cert.pfx", $cert)
# Подпись
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
& $signtool sign /f cert.pfx /p $env:CERT_PASSWORD /tr http://timestamp.digicert.com /td sha256 /fd sha256 dist/umbrix-1.7.3-windows-setup.exe
# Удалить временный .pfx
Remove-Item cert.pfx
- name: Upload to Gitea
run: |
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/assets" `
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" `
--data-binary "@dist/umbrix-1.7.3-windows-setup.exe"
```
## Альтернативы (НЕ рекомендуется)
### 1. Self-Signed сертификат (для тестирования)
```powershell
# Создать self-signed сертификат
$cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Umbrix Team" -CertStoreLocation Cert:\CurrentUser\My
# Экспортировать
$pwd = ConvertTo-SecureString -String "password123" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath umbrix-selfsigned.pfx -Password $pwd
# Подписать
signtool sign /f umbrix-selfsigned.pfx /p password123 /fd sha256 umbrix-1.7.3.exe
```
**⚠️ Проблемы:**
- Windows все равно показывает предупреждение
- Нужно вручную добавлять сертификат в доверенные
- НЕ работает на других компьютерах
- Только для внутреннего тестирования
### 2. Open Source Certificate (StartSSL, Let's Encrypt)
**Не работает для Code Signing!**
- Let's Encrypt выдает только SSL/TLS (для HTTPS)
- Code Signing требует проверку юрлица
- Нет бесплатных Code Signing сертификатов
### 3. Использование osslsigncode (Linux подпись Windows файлов)
```bash
# Установка на Linux
sudo apt install osslsigncode
# Подпись (с .pfx сертификатом)
osslsigncode sign \
-pkcs12 umbrix-cert.pfx \
-pass "PASSWORD" \
-ts http://timestamp.digicert.com \
-in umbrix-1.7.3-windows-setup.exe \
-out umbrix-1.7.3-windows-setup-signed.exe
```
## Рекомендации для Umbrix
### Для разработки и тестирования (СЕЙЧАС):
**Без сертификата** - просто предупреждение Windows
- Пользователи могут нажать "Все равно запустить"
- Работает для внутреннего использования
- Бесплатно
### Для публичного релиза (БУДУЩЕЕ):
**DigiCert EV Code Signing** ($799/год)
- Сразу доверие Windows
- Нет предупреждений
- Профессиональный вид
- Рекомендуется для коммерческого продукта
### Для малого бюджета:
**Certum Open Source Code Signing** (€199/год)
- Дешевле других
- Принимают криптовалюту
- Специальная цена для Open Source проектов
- Требуют ссылку на GitHub/GitLab
## Ссылки
**Покупка сертификатов:**
- DigiCert: https://www.digicert.com/signing/code-signing-certificates
- Sectigo: https://sectigo.com/ssl-certificates-tls/code-signing
- GlobalSign: https://www.globalsign.com/en/code-signing-certificate
- SSL.com: https://www.ssl.com/certificates/code-signing/
- Certum: https://en.sklep.certum.pl/data-safety/code-signing-certificates/
**Документация:**
- Microsoft Code Signing: https://learn.microsoft.com/windows/win32/seccrypto/cryptography-tools
- signtool.exe: https://learn.microsoft.com/windows-hardware/drivers/devtest/signtool
**Проверка репутации SmartScreen:**
- https://www.microsoft.com/en-us/wdsi/filesubmission
## FAQ
**Q: Можно ли работать без сертификата?**
A: Да! Приложение будет работать, но Windows покажет предупреждение "Неизвестный издатель". Для личного/внутреннего использования это OK.
**Q: Как быстро получить доверие SmartScreen с обычным сертификатом?**
A: Нужно минимум 100-1000 установок за 2-3 месяца. EV сертификат дает доверие сразу.
**Q: Можно ли использовать сертификат на Linux для подписи Windows файлов?**
A: Да, через `osslsigncode`. Но EV сертификаты на USB токене работают только на Windows.
**Q: Что дешевле - EV или обычный Code Signing?**
A: Обычный дешевле ($299 vs $799), но нужно ждать наработки репутации. EV дороже, но доверие сразу.
**Q: Сертификат для Umbrix - обязателен?**
A: Для закрытого тестирования - НЕТ. Для публичного релиза - ОЧЕНЬ ЖЕЛАТЕЛЬНО.
## Итого
**Текущая конфигурация обновлений:**
- ✅ Файл: `.exe` установщик (Inno Setup)
- ✅ Приоритет поиска: x64 → amd64 → win64 → setup → installer → любой .exe
- ✅ Установка: PowerShell с `/VERYSILENT /SUPPRESSMSGBOXES /NORESTART`
- ✅ Автоперезагрузка: через 2 секунды
- ⚠️ Сертификат: НЕТ (показывает предупреждение, но работает)
**Следующие шаги:**
1. Собрать Windows версию на машине с Windows
2. Создать Inno Setup установщик
3. Загрузить в Gitea релиз
4. Протестировать автообновление
5. (Опционально) Купить сертификат для публичного релиза

View File

@@ -0,0 +1,110 @@
# Windows Build Cheat Sheet
## 🚀 Быстрая сборка (на Windows машине)
```powershell
# 1. Клонировать репозиторий
git clone --recursive https://update.umbrix.net/vodorod/umbrix.git
cd umbrix
# 2. Скачать и заменить libcore.dll
curl -L -o libcore.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz"
tar -xzf libcore.tar.gz
Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force
# 3. Установить flutter_distributor (один раз)
dart pub global activate flutter_distributor
# 4. СОБРАТЬ УСТАНОВЩИК
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
# ✅ Результат: dist\1.7.3+173\umbrix-setup-x64.exe (~60MB)
```
## 📦 Что получается?
**Один .exe файл** который содержит:
- umbrix.exe (основное приложение)
- Flutter runtime
- libcore.dll (45MB VPN ядро)
- WebUI
- Все зависимости
- Установщик Inno Setup
## 📤 Загрузка в Gitea
```powershell
# Переименовать для релиза
$version = "1.7.3"
$file = "dist\$version+173\umbrix-setup-x64.exe"
$newName = "umbrix-$version-windows-setup-x64.exe"
Copy-Item $file $newName
# Загрузить
$token = "YOUR_GITEA_TOKEN"
$releaseId = 1
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/$releaseId/assets?name=$newName" `
-H "Authorization: token $token" `
-H "Content-Type: application/octet-stream" `
--data-binary "@$newName"
```
## ✅ Тестирование автообновлений
```powershell
# 1. Установить старую версию (например 1.7.0)
.\umbrix-1.7.0-windows-setup-x64.exe
# 2. Запустить приложение
# Через 5 секунд появится уведомление об обновлении
# 3. Нажать "Обновить"
# Автоматически скачается, установится, перезапустится
# 4. Проверить версию
# Должна быть 1.7.3
```
## 🔧 Требования
- Windows 10/11
- Flutter 3.24.0+
- Visual Studio 2022 с C++
- Inno Setup 6.x+ (https://jrsoftware.org/isdl.php)
## 📚 Документация
- **Полная инструкция:** [WINDOWS_DISTRIBUTOR_BUILD.md](WINDOWS_DISTRIBUTOR_BUILD.md)
- **Подпись кода:** [CODE_SIGNING_WINDOWS.md](CODE_SIGNING_WINDOWS.md)
- **Ручная сборка:** [WINDOWS_BUILD_INSTRUCTIONS.md](WINDOWS_BUILD_INSTRUCTIONS.md)
## ⚠️ Частые ошибки
**"Failed to lookup symbol 'changeHiddifyOptions'"**
→ Используйте libcore.dll из umbrix-libcore, НЕ из оригинального Hiddify
**"Inno Setup not found"**
→ Установите Inno Setup и добавьте в PATH
**"flutter_distributor command not found"**
`dart pub global activate flutter_distributor`
→ Добавьте `C:\Users\YOUR_NAME\AppData\Local\Pub\Cache\bin` в PATH
## 💡 Сертификат кода
**Не обязателен для работы!**
- Без сертификата: Windows показывает предупреждение, но приложение работает
- С сертификатом: Нет предупреждений, "Проверенный издатель"
- Цена: $299-799/год (DigiCert, Sectigo, Certum)
- Подробности: [CODE_SIGNING_WINDOWS.md](CODE_SIGNING_WINDOWS.md)
## 🎯 Итого
**Одна команда → Один .exe файл → Готово к релизу**
```powershell
dart run flutter_distributor package --platform windows --targets exe
```
Всё остальное делается автоматически! 🚀

View File

@@ -1,5 +1,28 @@
# Windows Build & Update Instructions
## ⚡ РЕКОМЕНДУЕТСЯ: flutter_distributor (автоматическая упаковка)
**Используйте [WINDOWS_DISTRIBUTOR_BUILD.md](WINDOWS_DISTRIBUTOR_BUILD.md)** для автоматической сборки через flutter_distributor.
Преимущества:
-**Один .exe файл** вместо папки с множеством файлов
- ✅ Автоматическая упаковка через Inno Setup
-Та же команда, что для Linux (deb/rpm/appimage)
- ✅ Готовый конфиг уже настроен в `windows/packaging/exe/`
**Команда:**
```powershell
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
```
**Результат:** `dist/1.7.3+173/umbrix-setup-x64.exe` (~60MB) - готов к загрузке!
---
## Альтернатива: Ручная сборка через Inno Setup
Используйте этот метод только если flutter_distributor не работает.
## Система автообновлений для Windows
### Требования для Windows EXE сборки

View File

@@ -0,0 +1,271 @@
# Сборка Windows установщика через flutter_distributor
## ✅ РЕШЕНИЕ: Один .exe файл со всеми зависимостями
Hiddify использует **flutter_distributor** с **target: exe**, который:
1. Собирает Flutter приложение
2. Упаковывает ВСЕ файлы (exe + dll + data + libcore.dll)
3. Создает **Inno Setup** установщик
4. Результат: **ОДИН .exe файл** (~50-60MB)
## Требования
1. **Windows машина** (или VM)
2. **Flutter SDK** 3.24.0+
3. **Visual Studio 2022** с C++ компонентами
4. **Inno Setup** 6.x+ (скачать: https://jrsoftware.org/isdl.php)
## Шаг 1: Клонирование репозитория на Windows
```powershell
# Клонировать с Gitea
git clone --recursive https://update.umbrix.net/vodorod/umbrix.git
cd umbrix
# Или обновить submodules если уже клонировано
git submodule update --init --recursive
```
## Шаг 2: Замена libcore.dll
```powershell
# Скачать libcore с Gitea
curl -L -o libcore-windows.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz"
# Распаковать
tar -xzf libcore-windows.tar.gz
# Заменить в проекте
Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force
Copy-Item HiddifyCli.exe -Destination libcore\bin\HiddifyCli.exe -Force
Copy-Item -Path webui -Destination libcore\bin\ -Recurse -Force
```
## Шаг 3: Установка flutter_distributor
```powershell
# Активировать плагин
dart pub global activate flutter_distributor
# Добавить в PATH (если еще нет)
# C:\Users\YOUR_USERNAME\AppData\Local\Pub\Cache\bin
```
## Шаг 4: Сборка установщика
```powershell
# Собрать Windows .exe установщик
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
# Процесс:
# 1. flutter build windows --release (5-10 минут)
# 2. Копирование файлов в temp директорию
# 3. Запуск Inno Setup для создания установщика (1-2 минуты)
# 4. Результат: dist\1.7.3+173\umbrix-setup-x64.exe (~50-60MB)
```
## Что происходит внутри?
### 1. Flutter Build
```
build/windows/x64/runner/Release/
├── umbrix.exe (основной исполняемый файл)
├── data/ (ресурсы Flutter)
│ ├── app.so
│ ├── icudtl.dat
│ └── flutter_assets/
├── flutter_windows.dll (Flutter engine)
├── libcore.dll (VPN ядро, 45MB)
└── другие .dll
```
### 2. Inno Setup упаковывает
- Все файлы из `build/windows/x64/runner/Release/`
- Создает установщик с GUI на русском/английском
- Добавляет ярлыки (рабочий стол + меню Пуск)
- Регистрирует в "Установка и удаление программ"
- Поддерживает тихую установку `/VERYSILENT`
### 3. Результат
```
dist/1.7.3+173/umbrix-setup-x64.exe (~50-60MB)
```
**Этот файл содержит ВСЁ:**
- umbrix.exe
- Flutter runtime
- libcore.dll (45MB)
- WebUI
- Все зависимости
## Шаг 5: Тестирование
```powershell
# Запустить установщик
.\dist\1.7.3+173\umbrix-setup-x64.exe
# Или тихая установка (для тестирования автообновлений)
.\umbrix-setup-x64.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
# Проверить установку
dir "C:\Program Files\Umbrix"
```
## Шаг 6: Загрузка в Gitea
```powershell
# Переименовать для релиза
$version = "1.7.3"
$file = "dist\$version+173\umbrix-setup-x64.exe"
$newName = "umbrix-$version-windows-setup-x64.exe"
Copy-Item $file $newName
# Загрузить через API
$token = "YOUR_GITEA_TOKEN"
$releaseId = 1 # ID релиза v1.7.3
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/$releaseId/assets?name=$newName" `
-H "Authorization: token $token" `
-H "Content-Type: application/octet-stream" `
--data-binary "@$newName"
```
## Автоматизация (GitHub Actions)
Создайте `.github/workflows/build-windows.yml`:
```yaml
name: Build Windows
on:
push:
tags: ['v*']
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.24.0'
- name: Download libcore
run: |
curl -L -o libcore.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz"
tar -xzf libcore.tar.gz
Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force
- name: Install flutter_distributor
run: dart pub global activate flutter_distributor
- name: Build Windows EXE
run: dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
- name: Upload to Gitea
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
$file = Get-ChildItem dist\*\umbrix-setup-x64.exe | Select-Object -First 1
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/assets" `
-H "Authorization: token $env:GITEA_TOKEN" `
--data-binary "@$($file.FullName)"
```
## Конфигурация (уже настроено)
**windows/packaging/exe/make_config.yaml:**
```yaml
app_id: 7U904649-52C2-5607-H590-CK880G32B76E
publisher: Umbrix Team
publisher_url: https://umbrix.net
display_name: Umbrix
executable_name: umbrix.exe
output_base_file_name: umbrix-setup-x64.exe
create_desktop_icon: true
install_dir_name: "{autopf64}\\Umbrix"
setup_icon_file: ..\..\windows\runner\resources\app_icon.ico
locales:
- en
- ru
```
**windows/packaging/exe/inno_setup.sas:**
- Шаблон Inno Setup с поддержкой тихой установки
- Автоматически закрывает старую версию перед установкой
- Создает ярлыки на рабочем столе и в меню Пуск
## Альтернатива: Ручная сборка через Inno Setup
Если flutter_distributor не работает:
```powershell
# 1. Собрать Flutter
flutter build windows --release
# 2. Создать installer.iss (см. WINDOWS_BUILD_INSTRUCTIONS.md)
# 3. Скомпилировать через Inno Setup GUI
# Или через командную строку:
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer.iss
```
## Troubleshooting
**Ошибка: "Inno Setup not found"**
```powershell
# Установить Inno Setup
# Добавить в PATH: C:\Program Files (x86)\Inno Setup 6
```
**Ошибка: "flutter_distributor command not found"**
```powershell
# Переустановить
dart pub global activate flutter_distributor
# Проверить PATH
echo $env:PATH | Select-String "Pub\\Cache\\bin"
```
**Ошибка: "Failed to lookup symbol 'changeHiddifyOptions'"**
```powershell
# Убедитесь, что используете libcore.dll из umbrix-libcore репозитория
# НЕ используйте оригинальный Hiddify libcore!
```
**Большой размер файла (~60MB)**
- Это нормально! Включает:
- Flutter runtime (~10MB)
- libcore.dll (45MB)
- WebUI (~600KB)
- Инсталлятор Inno Setup (~5MB)
## Сравнение с Linux сборкой
| Платформа | Команда | Результат | Размер |
|-----------|---------|-----------|--------|
| **Linux** | `dart run flutter_distributor package --platform linux --targets deb` | umbrix-1.7.3-linux.deb | 29MB |
| **Windows** | `dart run flutter_distributor package --platform windows --targets exe` | umbrix-setup-x64.exe | 60MB |
**Почему Windows больше?**
- libcore.dll (45MB) vs libcore.so (45MB) - одинаково
- Inno Setup упаковщик добавляет ~5MB
- Windows DLL зависимости больше чем Linux .so
## Итого
**flutter_distributor решает все проблемы:**
- Один .exe файл вместо папки с множеством файлов
- Автоматическая упаковка через Inno Setup
- Поддержка тихой установки `/VERYSILENT`
- Совместимость с системой автообновлений
- Та же команда, что и для Linux (deb/rpm/appimage)
🎯 **На Windows машине выполнить одну команду:**
```powershell
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
```
**Результат:** `dist/1.7.3+173/umbrix-setup-x64.exe` - готов к загрузке в Gitea!

View File

@@ -0,0 +1,284 @@
# 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)}}
```
---
## <20> Структура 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** - название намекает что это утилита командной строки
---
## <20>💡 Советы
**Для разработки:**
- ✅ Используйте 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)

View File

@@ -68,8 +68,8 @@ function InitializeSetup(): Boolean;
var
ResultCode: Integer;
begin
Exec('taskkill', '/F /IM hiddify.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
Exec('net', 'stop "HiddifyTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
Exec('sc.exe', 'delete "HiddifyTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
Exec('taskkill', '/F /IM umbrix.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
Exec('net', 'stop "UmbrixTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
Exec('sc.exe', 'delete "UmbrixTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
Result := True;
end;

View File

@@ -1,17 +1,13 @@
app_id: 6L903538-42B1-4596-G479-BJ779F21A65D
publisher: Hiddify
publisher_url: https://github.com/hiddify/hiddify-next
display_name: Hiddify
executable_name: Hiddify.exe
output_base_file_name: Hiddify.exe
app_id: 7U904649-52C2-5607-H590-CK880G32B76E
publisher: Umbrix Team
publisher_url: https://umbrix.net
display_name: Umbrix
executable_name: umbrix.exe
output_base_file_name: umbrix-setup-x64.exe
create_desktop_icon: true
install_dir_name: "{autopf64}\\Hiddify"
install_dir_name: "{autopf64}\\Umbrix"
setup_icon_file: ..\..\windows\runner\resources\app_icon.ico
locales:
- ar
- en
- fa
- ru
- pt
- tr
script_template: inno_setup.sas

View File

@@ -0,0 +1,19 @@
═══════════════════════════════════════════════════════════
UMBRIX - Portable Version
═══════════════════════════════════════════════════════════
🚀 ДЛЯ ЗАПУСКА ПРИЛОЖЕНИЯ:
► Откройте файл: Umbrix.exe
📦 Portable версия:
Не требует установки
Не требует прав администратора
Все настройки сохраняются в папке приложения
⚠️ НЕ ЗАПУСКАЙТЕ:
• UmbrixCli.exe - это служебная утилита командной строки
• Файлы .dll - это системные библиотеки
═══════════════════════════════════════════════════════════
https://umbrix.net
═══════════════════════════════════════════════════════════

View File

@@ -0,0 +1,8 @@
@echo off
chcp 65001 >nul 2>&1
echo.
echo ═══════════════════════════════════════════════
echo Запуск Umbrix...
echo ═══════════════════════════════════════════════
echo.
start "" "%~dp0Umbrix.exe"