菜单

设置管理

相关源文件

PowerToys 使用一个复杂的设置管理系统,负责配置持久化、用户界面通信和企业策略集成。该系统通过 JSON 文件管理 PowerToys 的常规设置和各个模块的配置,提供了一个专门的设置 UI 应用程序,并支持用于企业部署的组策略覆盖(GPO)。

有关读取这些设置的模块加载系统的信息,请参阅 模块加载系统。有关设置 UI 应用程序架构的详细信息,请参阅 设置 UI 架构

架构概述

设置管理系统包含几个关键组件,它们协同工作,提供一个灵活且面向企业的配置系统。

设置系统架构

该系统运行两个独立的进程:主 PowerToys 运行程序和一个专用的设置 UI 应用程序,它们通过命名管道通信以实现实时配置更新。

来源: src/runner/general_settings.cpp1-321 src/runner/settings_window.cpp1-643 src/common/utils/gpo.h1-284

设置存储和文件结构

PowerToys 将配置数据存储在位于用户本地应用程序数据目录中的 JSON 文件中。存储系统采用分层方法,为不同的配置范围使用单独的文件。

设置文件组织

general_settings.json 文件包含跨领域配置,例如启动行为、主题偏好和模块启用/禁用状态,而各个模块则维护自己的配置文件。

来源: src/common/SettingsAPI/settings_helpers.cpp src/runner/general_settings.cpp59-75 src/runner/settings_window.cpp240-244

设置加载和应用程序流程

设置系统在启动期间加载配置数据,并将其应用于运行程序和各个模块。加载过程包括验证、GPO 覆盖应用和模块状态同步。

设置加载顺序

加载过程确保组策略设置覆盖用户偏好设置,从而使企业管理员能够最终控制 PowerToys 配置。

来源: src/runner/main.cpp439-442 src/runner/general_settings.cpp106-235 src/runner/general_settings.cpp237-320

设置 UI 通信系统

设置 UI 是一个独立的进程,通过双向命名管道 IPC 系统与 PowerToys 运行程序通信。这种架构允许设置 UI 以与运行程序不同的提升权限运行。

设置 UI IPC 架构

该系统使用 UUID 生成的管道名称来避免冲突,并支持实时双向通信以立即应用设置。

来源: src/runner/settings_window.cpp324-535 src/runner/settings_window.cpp170-246 src/settings-ui/Settings.UI/ViewModels/GeneralViewModel.cs86-200

配置处理和消息流

设置系统通过结构化的消息流处理配置更改,该流程验证输入、应用更改并将状态在进程之间同步。

设置更新消息流

该系统支持即时应用设置和延迟操作,例如用于权限更改的进程重启。

来源: src/runner/settings_window.cpp170-246 src/runner/settings_window.cpp66-148 src/runner/settings_window.cpp150-168

组策略集成

PowerToys 为企业环境提供了全面的组策略支持,允许管理员通过 Windows 组策略基础设施控制 PowerToys 配置的所有方面。

组策略集成架构

策略系统支持每个设置的五种状态:已启用、已禁用、未配置、不可用(注册表访问问题)和错误值(无效策略数据)。

策略状态描述
gpo_rule_configured_enabled1策略强制启用功能
gpo_rule_configured_disabled0策略强制禁用功能
gpo_rule_configured_not_configured-1未设置策略,由用户控制
gpo_rule_configured_unavailable-2无法读取注册表
gpo_rule_configured_wrong_value-3无效策略值

来源: src/gpo/assets/PowerToys.admx1-1000 src/common/utils/gpo.h9-16 src/runner/general_settings.cpp121-170 src/runner/general_settings.cpp190-196

设置层级和覆盖系统

PowerToys 实现了一个分层设置系统,其中组策略设置会覆盖用户偏好设置,而全局策略可以被特定的模块策略覆盖。

设置解析层级

系统按优先级顺序评估设置,组策略优先于用户偏好设置,以确保企业合规性。

来源: src/runner/general_settings.cpp190-214 src/runner/general_settings.cpp299-318 src/common/utils/gpo.h26-66

设置验证和错误处理

设置系统包含全面的验证和错误处理,以确保配置的完整性,并在设置文件损坏或丢失时提供优雅的回退。

组件验证方法错误处理
JSON 解析JsonObject::TryParse()记录错误,使用默认值
GPO 访问注册表读取验证返回 gpo_rule_configured_unavailable
模块配置模块特定验证禁用模块,记录错误
主题设置枚举验证回退到“系统”主题
文件 I/O异常处理创建默认配置

即使在单个配置文件损坏或组策略设置包含无效值时,该系统也能确保 PowerToys 保持可用。

来源: src/runner/settings_window.cpp172-178 src/runner/general_settings.cpp260-293 src/settings-ui/Settings.UI/ViewModels/GeneralViewModel.cs122-133