# Передача SbLauncher коллеге ## Первый запуск 1. Передайте `SbLauncher-v0.1.2-win-x64.zip` и файл `.zip.sha256` либо ссылку на релиз. Если репозиторий закрыт, для скачивания по ссылке нужен доступ к нему; сам ZIP можно передать напрямую. 2. Коллега распаковывает ZIP в постоянную папку, например `C:\Tools\SbLauncher`. Windows 10/11 x64 и .NET Framework 4.x обязательны. Устанавливать Visual Studio, собирать исходники или копировать примеры конфигурации не нужно: `bin\sb.exe`, `doc\doc.srs` и базовые серверы уже входят в архив. В комплекте используется sing-box `1.12.19`, `windows/amd64`. 3. Запускает `SbLauncher.exe` и подтверждает запрос администратора, необходимый для TUN и сетевых маршрутов. 4. На вкладке «Настройки» вводит **свой** приватный ключ WireGuard и **свой** локальный IP в формате CIDR, например `10.10.0.2/24`. Эти данные должны быть выданы и зарегистрированы для него на сервере WireGuard. В режиме `direct` вместо WireGuard выбирает свой сетевой адаптер. 5. Выбирает базовый сервер и подключается. Дополнительные личные серверы добавляет через поле импорта. При ошибке смотрит сообщение на вкладке «Лог». Лаунчер автоматически сохраняет введённые настройки. Ваш приватный ключ, локальный IP, сетевой адаптер и личные серверы в архив не попадают. ## Как устроены файлы | Файл | Содержимое | При обновлении | | --- | --- | --- | | `profiles.base.json` | Базовые серверы для всех и общие параметры WireGuard-сервера | Заменяется версией из релиза | | `profiles.json` | Только личные серверы пользователя и список скрытых базовых серверов | Сохраняется | | `local.json` | Приватный ключ, локальный IP WireGuard, адаптер, тема и выбранный сервер | Сохраняется | | `profiles.legacy-backup.json` | Резервная копия старого списка при переходе с v0.1.1 | Сохраняется, в релиз не входит | | `templates/*.json` | Общие правила подключения | Обновляются из релиза | | `run/config.json` | Сгенерированный конфиг sing-box | Создаётся при подключении | Базовые и личные серверы отображаются вместе. Добавление личного сервера не меняет базовый каталог. Удаление базового сервера скрывает его для этого пользователя, и обновление не возвращает его в список. При первом запуске поверх v0.1.1 общий список `profiles.json` автоматически разделяется: совпадающие базовые записи берутся из релиза, личные и изменённые записи сохраняются в личном файле. Перед преобразованием создаётся резервная копия `profiles.legacy-backup.json`. `local.json` сохраняет настройки пользователя. ## Обновление без потери настроек 1. Остановите подключение и закройте программу через меню значка в трее. 2. Для резервной копии сохраните `local.json` и `profiles.json`. 3. Распакуйте новый релиз **поверх той же папки**, согласившись на замену файлов программы, базового каталога и шаблонов. 4. Запустите лаунчер и проверьте версию в шапке окна. ZIP намеренно не содержит `local.json`, `profiles.json` и резервную копию старых профилей, поэтому распаковка не заменяет их. Базовые серверы и правила обновятся, а личные серверы, ключ и IP останутся. Если вы редактировали шаблоны вручную, сохраните и сравните их перед заменой. При установке в новую папку перенесите туда только свои `local.json` и `profiles.json` из прежней установки. Не удаляйте старую папку, пока не проверили запуск и сохранённые настройки. ## Проверка архива В PowerShell рядом с ZIP и `.sha256`: ```powershell $archive = '.\SbLauncher-v0.1.2-win-x64.zip' $expected = ((Get-Content ($archive + '.sha256') -Raw).Trim() -split '\s+')[0] $actual = (Get-FileHash $archive -Algorithm SHA256).Hash if ($actual -ine $expected) { throw 'Контрольная сумма ZIP не совпала.' } 'Контрольная сумма совпала.' ``` ## Подготовка следующих релизов Меняйте общий каталог `profiles.base.json`, сохраняя `id` уже существующих серверов даже при смене их адресов или ключей. В нём разрешены общие данные доступа и публичные параметры WireGuard-сервера; персональных `private_key` и `local_address` в нём быть не должно. Не копируйте личный `profiles.json` в релиз и не формируйте из него базовый каталог автоматически: в личном файле могут появиться серверы, которые пользователь не собирался передавать другим. `release.ps1` берёт серверы только из явно подготовленного `profiles.base.json`.