Портативный режим: данные рядом с exe (XIC-34) - #33
Merged
Conversation
) Запрос jintaxi: настройки в AppData теряются при переустановке Windows, хочется держать их рядом с программой (как .portable в VS Code / Terminal). Правила выбора каталога (AppPaths): - рядом с exe лежит config.json → работаем с ним, метка не нужна; - лежит метка .portable или portable.txt → каталог программы, а прежние настройки из %APPDATA% копируются при первом старте (включение режима не должно выглядеть как «всё сбросилось»); - иначе прежнее поведение. Два имени метки не прихоть: Проводник Windows не даёт создать файл с именем, начинающимся с точки, — с одним лишь .portable фича упёрлась бы в юзабилити. Каталог программы бывает только для чтения (Program Files, WinGet\Packages): проверяем пробной записью и откатываемся в %APPDATA% с причиной в логе — иначе установленная копия молча теряла бы настройки. Причина копится полем, а не пишется сразу: Log сам спрашивает AppPaths.DataDir, и запись во время инициализации вошла бы в рекурсию. log.txt следует за конфигом; api.json намеренно остаётся в %ProgramData% под ACL — на этом держится невозможность включить HTTP API правкой пользовательского конфига (XIC-13). «О программе» показывает фактические пути и признак режима. Проверено вживую: портативная копия с portable.txt подхватила настройки из %APPDATA% (кривые, лимиты, язык — всё на месте), config.json и log.txt легли рядом, api.json остался в ProgramData. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Закрывает #32 (запрос @jintaxi).
Правила выбора каталога
config.json→ работаем с ним (метка не нужна — раз положили, значит хотели)..portableилиportable.txt→ каталог программы; прежние настройки из%APPDATA%копируются при первом старте, чтобы включение режима не выглядело как «всё сбросилось».%APPDATA%\XiControl).Почему два имени метки.
.portable— как в VS Code и Windows Terminal, но Проводник Windows не даёт создать файл, имя которого начинается с точки. С одним лишь.portableфича упёрлась бы в юзабилити, поэтомуportable.txt— равноправный вариант (правый клик → Создать → Текстовый документ).Каталог программы может быть только для чтения (
Program Files,WinGet\Packages): проверяем пробной записью и откатываемся в%APPDATA%с причиной в логе. Молча терять настройки установленной через winget копии — недопустимо.Что переехало, а что нет
config.json,log.txt— переезжают.api.json— намеренно остаётся в%ProgramData%под ACL «только администраторы»: на этом держится то, что HTTP API нельзя включить или подменить его токен правкой пользовательского конфига (XIC-13). Перенос рядом с exe сломал бы модель безопасности.Грабля, на которую стоит посмотреть в ревью
Logпишет в каталог изAppPaths, аAppPathsво время определения каталога не может логировать — вышла бы рекурсия (Log→AppPaths.DataDir→ инициализация →Log). Поэтому причина отката копится в полеFallbackReason, а печатает еёProgramуже после инициализации.Проверка
dotnet build0/0,dotnet test— 375 зелёных (+7: конфиг рядом без метки, обе метки, откат при read-only, неизвестный каталог exe, отсутствие пробной записи при обычном запуске).Живьём: развёрнута портативная копия с
portable.txt→ настройки из%APPDATA%подхватились полностью (кривые авто-яркости, лимиты, порог заряда, язык),config.jsonиlog.txtлегли рядом с exe, первой строкой лога —AppPaths: портативный режим, данные в …,api.jsonостался в%ProgramData%.🤖 Generated with Claude Code