-
Notifications
You must be signed in to change notification settings - Fork 0
RU Storage Policy
Release directory считается неизменяемой. Финальный пользовательский пакет содержит только Shadowsocks.exe; настройки, кэши, плагины, логи и скачиваемые компоненты не должны появляться рядом с EXE.
Основной root:
%LOCALAPPDATA%\Shadowsocks
Типовая структура:
settings.json
settings.backup.json
Cache\PAC\...
Cache\GeoSite\...
Data\PAC\...
Plugins\<plugin-id>\...
Components\DNSCryptProxy\...
Logs\shadowsocks.log
Runtime\WinDivert\...
Runtime\DNSCryptProxy\...
Startup\Shadowsocks.exe
Temp\NetworkService\...
Temp\Updates\DNSCryptProxy\...
Temp\StartupLogs\...
Temp\Working\...
settings.json хранится через ISettingsStore / JsonFileSettingsStore. Запись выполняется через temporary file + atomic replacement; settings.backup.json содержит предыдущий устойчивый snapshot. Удалённые schema fields очищаются при канонической миграции typed Configuration.
Local PAC и GeoSite cache находятся под активным storage root. user-rule.txt — поддерживаемый локальный override для managed C# FilterEngine. Исполняемый abp.txt больше не поддерживается.
Управляемые пакеты находятся в:
Plugins\<plugin-id>\
Built-in catalog package хранит .plugin.json с trusted repository, release tag, выбранным asset, настройкой automatic updates и временем последней успешной проверки. Manual ZIP/TAR.GZ import не включается в background update. Staging/rollback используют временные .plugin-stage-* / .plugin-backup-* каталоги под тем же active storage root; orphaned backup после прерванного directory swap восстанавливается при следующем чтении plugin storage, а устаревшие transient-каталоги очищаются best-effort. Сервер хранит managed plugin id/options/arguments. Runtime разрешает executable через PluginManager, а не через произвольный абсолютный путь, PATH или свободно заданный repository.
Постоянный компонент:
Components\DNSCryptProxy\...
Runtime/staging размещается в Runtime\DNSCryptProxy и Temp\Updates\DNSCryptProxy. Бинарь не встраивается в Shadowsocks.exe; он скачивается и проверяется при явном использовании функции. Подписанный resolver-каталог хранится как аутентифицированная пара Runtime\DNSCryptProxy\public-resolvers.md + .minisig. Приложение обновляет эту пару через Cloudflare DoH по Shadowsocks с резервным Google DoH и проверяет закреплённый Minisign-ключ DNSCrypt до замены файлов; сгенерированный catalog-профиль dnscrypt-proxy содержит urls = [] и читает только локальный кэш. В Clean Mode та же структура размещается внутри session root.
WinDivert runtime материализуется только для Admin Mode под Runtime\WinDivert.
Встроенный Shadowsocks.NetworkService извлекается во временный уникальный каталог:
Temp\NetworkService\<version>\<hash>\<pid-guid>\
Извлечение синхронизируется и проверяется по hash.
Portable/Clean Mode определяется suffix p в имени EXE, например:
Shadowsocksp.exe
Shadowsocks-5.2p.exe
Каждый запуск получает уникальный root:
%TEMP%\Shadowsocks\Clean\<timestamp>-<pid>-<guid>\
Clean Mode:
- не читает normal
%LOCALAPPDATA%\Shadowsocks; - не мигрирует старые sidecars;
- отключает Start with Windows;
- размещает plugins/DNSCrypt/cache/logs внутри Temp session;
- при Quit удаляет session best-effort;
- позже очищает abandoned sessions.
Обычный режим поддерживает стабильную проверенную SHA-256 копию:
%LOCALAPPDATA%\Shadowsocks\Startup\Shadowsocks.exe
HKCU Run указывает на неё с --start-hidden и внутренним startup-origin для основного EXE. Это позволяет self-updater обновлять настоящий product EXE, даже если текущий процесс запущен из старой startup-copy.
Application self-update намеренно находится вне StorageRoot:
%TEMP%\Shadowsocks\Updates\<transaction>\
Shadowsocks-win-x64.zip
Shadowsocks-win-x64.zip.sha256
Shadowsocks.Update.exe
Staging должен пережить остановку приложения и очистку Clean Mode session. Updater повторно проверяет SHA-256 собственного staged image, ждёт старый PID, сохраняет rollback copy, заменяет target EXE, запускает новую копию и только затем transaction удаляется.
Registry используется только там, где этого требует Windows integration:
- Start with Windows;
-
ss://protocol association; - WinINet/system proxy;
- read-only discovery лаунчеров/игр.
Настройки продукта в Registry не хранятся.
Ни один product code path не должен создавать mutable sidecar рядом с Shadowsocks.exe. Release validator проверяет one-file distribution и запрещает retired executable-side config/runtime artifacts.