diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..0da5f7a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto eol=lf +build.cmd text eol=crlf +*.ps1 text eol=crlf diff --git a/.gitignore b/.gitignore index ed6d54a..66b2247 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ doc/ # ── результат сборки ───────────────────────────────────────────────── *.exe *.pdb + +# Локальные архивы релизов +dist/ diff --git a/App.cs b/App.cs index 14a7404..0a8302a 100644 --- a/App.cs +++ b/App.cs @@ -140,7 +140,6 @@ namespace SbLauncher readonly System.Windows.Forms.ToolStripMenuItem _miToggle; readonly Window _w; readonly MainVm _vm; - bool _balloonShown; public Tray(Window w, MainVm vm) { @@ -180,15 +179,6 @@ namespace SbLauncher public void HideToTray() { _w.Hide(); - if (!_balloonShown) - { - _balloonShown = true; - _ni.ShowBalloonTip(3000, "sb launcher", - _vm.IsConnected - ? "Свернулся в трей — туннель продолжает работать." - : "Свернулся в трей.", - System.Windows.Forms.ToolTipIcon.Info); - } } public void Restore() diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..87819ae --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# История изменений + +Здесь фиксируются заметные изменения каждой выпущенной версии. Версии имеют вид +`MAJOR.MINOR.PATCH`; Git-тег для версии `1.2.3` называется `v1.2.3`. + +## Ещё не выпущено + +Пока нет записей. + +## 0.1.0 — 2026-09-26 + +- Первый рабочий прототип WPF-лаунчера с интерфейсом glass. +- Импорт и выбор серверов, три режима подключения, запуск sing-box и просмотр лога. +- Очистка лога из интерфейса и удаление управляющих ANSI-кодов. +- Исправлен запуск sing-box в окружении с дублирующимися `Path` и `PATH`. +- Локальные настройки и профили отделены от исходников и исключены из Git. +- Сборка ZIP-архива релиза с проверками и контрольной суммой SHA-256. diff --git a/README.md b/README.md index 9a8b5d9..389113d 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,95 @@ -# sb launcher · glass preview +# sb launcher · glass -Отдельный тестовый репозиторий интерфейса для Windows 11. Рабочий `sb_launcher_rev2` не меняется. Это функционирующий лаунчер на WPF/.NET Framework 4.x: выбор и импорт серверов, проверка конфигурации, запуск и остановка sing-box, логи и настройки остались на месте. +Лаунчер для sing-box с интерфейсом WPF. Работает в Windows 10/11 x64 с +.NET Framework 4.x. Поддерживает импорт и выбор серверов, три режима +подключения (`wg`, `direct`, `wgonly`), проверку конфигурации, запуск и остановку +sing-box, логи и светлую/тёмную тему. -Дизайн использует полупрозрачные панели, мягкие градиенты и логотип «щит с арбузом». При подключении кольцо вокруг щита вращается по часовой стрелке; при отключении — обратно. Успешное соединение отмечает короткий световой импульс. Анимации меняют только поворот и прозрачность, без непрерывного размытия фона. +Это отдельный прототип интерфейса; рабочая копия `sb_launcher_rev2` не меняется. +Приложение запрашивает права администратора для настройки сетевых маршрутов. -## Запуск +![Светлая тема](preview/glass-light.png) -В папке уже лежат локальные `profiles.json`, `bin/sb.exe` и `doc/doc.srs` для теста; они не входят в Git. `local.json` создан с пустым приватным ключом. Заполните ключ и локальный адрес на вкладке «Настройки», затем в PowerShell: +[Тёмная тема](preview/glass-dark.png) + +## Подготовка + +Для сборки нужен `csc.exe` из установленного .NET Framework 4.x. `build.cmd` +использует `%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\csc.exe`; Visual Studio +и .NET SDK не требуются. + +Для подключения дополнительно нужны совместимый исполняемый файл sing-box и +файл правил. Они хранятся только локально и в репозиторий или релизный архив +не входят: + +```text +bin/sb.exe +doc/doc.srs +``` + +Из чистого клона создайте локальные настройки и профили: ```powershell -cd F:\gitea\sb_launcher_glass +Copy-Item .\local.example.json .\local.json +Copy-Item .\profiles.example.json .\profiles.json cmd /c build.cmd .\SbLauncher.exe ``` -Сборка использует `csc.exe` из установленного .NET Framework 4.x. Запуск основного exe запросит права администратора: они нужны sing-box для сетевых маршрутов. Для проверки интерфейса без запуска сети: `cmd /c build.cmd stress`. +Демонстрационные адреса из `profiles.example.json` не подключаются. Добавьте +свои серверы через импорт или в `profiles.json`, затем укажите приватный ключ +WireGuard, адрес туннеля и сетевой адаптер на вкладке «Настройки». Секреты в +`local.json`, а также серверы в `profiles.json` исключены из Git. Не добавляйте +их в коммиты и релизные архивы. -Для чистого клона скопируйте `profiles.example.json` в `profiles.json` и `local.example.json` в `local.json`, затем добавьте реальные серверы и ключ. Примерные адреса из `profiles.example.json` служат только для демонстрации. Профили и локальные настройки исключены из Git, поскольку могут содержать учётные данные. +Готовый ZIP из релиза распаковывается аналогично: поместите рядом с лаунчером +`bin/sb.exe` и `doc/doc.srs`, скопируйте два файла `.example.json` без слова +`.example` в имени и заполните свои данные. Сборка из исходников для ZIP не нужна. -`build.cmd deploy` принимает явный путь назначения; папка рабочего лаунчера никогда не выбирается по умолчанию. +## Сборка и проверки -Офлайн-превью с демонстрационными адресами: [светлая тема](preview/glass-light.png) и [тёмная тема](preview/glass-dark.png). +```powershell +cmd /c build.cmd # SbLauncher.exe +cmd /c build.cmd importtest # импорт ссылок +cmd /c build.cmd profiletest # сохранение профилей +cmd /c build.cmd stress # нагрузка интерфейса +``` + +`build.cmd selftest` проверяет локальную конфигурацию и может использовать +текущие профили. `build.cmd deploy "путь"` копирует сборку в явно указанную +тестовую папку; локальный `local.json` в ней не перезаписывается. + +## Git и релизы + +Основная ветка — `main`. Разработку фиксируйте коммитами в Git. Для очередного +релиза обновите [CHANGELOG.md](CHANGELOG.md), три версии в `Version.cs` и номер +`assemblyIdentity` в `app.manifest`; используйте формат `MAJOR.MINOR.PATCH`. +После этого, например для версии `0.1.1`: + +```powershell +git status +git add -A +git diff --cached --stat +git commit -m "Release v0.1.1" +.\release.ps1 -Version 0.1.1 +git tag -a v0.1.1 -m "SbLauncher v0.1.1" +``` + +Перед коммитом проверьте список добавленных файлов: в нём должны быть только +изменения для этого релиза. `release.ps1` требует чистую рабочую копию, запускает сборку и три +проверки, сверяет версию EXE и собирает `dist/SbLauncher-vX.Y.Z-win-x64.zip` +с SHA-256 в соседнем `.sha256`. Архив содержит только приложение, шаблоны, +примеры конфигурации и документацию. Сборка идёт через `build.cmd staged`, +поэтому открытый лаунчер не блокирует выпуск. Для пробного запуска на незакоммиченных +изменениях есть `-AllowDirty`; архив получает суффикс `-dev` с хешем коммита. + +При настроенном удалённом репозитории отправьте ветку и тег: + +```powershell +git push origin main +git push origin v0.1.1 +``` + +Затем создайте релиз `v0.1.1` в GitHub/Gitea, вставьте заметки из +`CHANGELOG.md` и прикрепите ZIP и `.sha256`. Если `origin` ещё не настроен, +сначала добавьте адрес своего удалённого репозитория. diff --git a/SbLauncher.cs b/SbLauncher.cs index 3353056..b534c15 100644 --- a/SbLauncher.cs +++ b/SbLauncher.cs @@ -674,14 +674,17 @@ namespace SbLauncher } } - static void ApplyEnv(ProcessStartInfo psi) + static void ApplyEnv() { // те же переменные, что были в startN.bat: конфиги пользуются // wireguard-outbound'ом, который в sing-box 1.12 объявлен // устаревшим и без этого флага не поднимается - psi.EnvironmentVariables["ENABLE_DEPRECATED_WIREGUARD_OUTBOUND"] = "true"; - psi.EnvironmentVariables["ENABLE_DEPRECATED_TUN_ADDRESS_X"] = "true"; - psi.EnvironmentVariables["ENABLE_DEPRECATED_SPECIAL_OUTBOUNDS"] = "true"; + // ProcessStartInfo.EnvironmentVariables может упасть, если Windows + // передала одновременно Path и PATH. Дочерний процесс наследует + // переменные текущего процесса и без обращения к этому словарю. + Environment.SetEnvironmentVariable("ENABLE_DEPRECATED_WIREGUARD_OUTBOUND", "true"); + Environment.SetEnvironmentVariable("ENABLE_DEPRECATED_TUN_ADDRESS_X", "true"); + Environment.SetEnvironmentVariable("ENABLE_DEPRECATED_SPECIAL_OUTBOUNDS", "true"); } // sb.exe check — синхронно, до запуска. Ошибку конфига лучше увидеть @@ -702,7 +705,7 @@ namespace SbLauncher psi.RedirectStandardError = true; psi.StandardOutputEncoding = Encoding.UTF8; psi.StandardErrorEncoding = Encoding.UTF8; - ApplyEnv(psi); + ApplyEnv(); using (Process p = new Process()) { @@ -749,7 +752,7 @@ namespace SbLauncher psi.RedirectStandardError = true; psi.StandardOutputEncoding = Encoding.UTF8; psi.StandardErrorEncoding = Encoding.UTF8; - ApplyEnv(psi); + ApplyEnv(); Process p = new Process(); p.StartInfo = psi; diff --git a/Ui.xaml b/Ui.xaml index addf02f..167f28d 100644 --- a/Ui.xaml +++ b/Ui.xaml @@ -815,12 +815,18 @@ - -