菜单

开发指南

相关源文件

本文档概述了 PowerToys 贡献者和维护者的开发环境、构建系统和工具。它涵盖了构建、测试和调试 PowerToys 模块的基本基础设施和流程。

有关设置开发环境和从源代码构建的详细说明,请参阅从源代码构建。有关创建新 PowerToys 模块的指南,请参阅创建新的 PowerToy。有关 PowerToys Run 插件开发,请参阅创建 PowerToys Run 插件

开发环境要求

PowerToys 使用现代 Windows 开发工具构建,具有特定的平台和工具链要求。

平台支持

PowerToys 支持 Windows 10 版本 1903 (build 19041) 及更高版本的 x64 和 ARM64 架构。主要开发目标是 Windows SDK 版本 10.0.22621.0 和 Visual Studio 2022 (v143 平台工具集)。

构建系统架构

来源:Cpp.Build.props1-125 Directory.Build.targets1-6

构建系统配置

PowerToys 使用 MSBuild 并对所有 C++ 项目进行标准化配置。构建系统强制执行一致的编译器设置、警告级别和优化参数。

编译器配置

C++ 构建配置启用了现代 C++ 标准(使用 stdcpplatest),将警告视为错误,并使用多处理器编译。控制流保护 (CFG) 已启用以增强安全性,并且所有构建都应用了 Spectre 缓解措施。

配置运行时库优化调试信息
调试MultiThreadedDebug已禁用完整版
发布MultiThreadedMaxSpeed优化

代码分析集成

在开发构建期间,使用 Microsoft C++ Core Guidelines 规则集自动运行静态代码分析。分析配置在全面性和构建性能之间取得了平衡,通过隐藏某些冗余警告来保持严格的安全性和正确性规则强制执行。

来源:Cpp.Build.props25-29 Cpp.Build.props42-62 CppRuleSet.ruleset1-324

开发工具和诊断

PowerToys 包含多种开发和诊断工具,用于支持开发期间和生产环境中的调试和故障排除。

错误报告工具架构

错误报告工具 (PowerToys.BugReportTool.exe) 在保护用户隐私的同时自动收集诊断信息。它会清理配置文件中的敏感数据,并排除文件路径、自定义键映射和安全密钥等个人信息。

来源:tools/BugReportTool/BugReportTool/Main.cpp28-49 tools/BugReportTool/BugReportTool/Main.cpp164-179

注册表和系统检查

诊断系统会检查与 PowerToys 相关的注册表项、COM 注册和 Shell 扩展,以识别配置问题。它还会收集系统信息,包括 Windows 版本、.NET 运行时安装和监视器配置。

来源:tools/BugReportTool/BugReportTool/RegistryUtils.cpp11-37 tools/BugReportTool/BugReportTool/InstallationFolder.cpp49-61

CI/CD 流水线和代码签名

PowerToys 使用 Azure DevOps 流水线进行持续集成和部署,并使用企业安全要求和流程 (ESRP) 签名来保证代码的真实性。

代码签名过程

构建流水线使用 Microsoft 的 ESRP 服务对所有 PowerToys 可执行文件、DLL 和安装程序进行签名。主要的 PowerToys 二进制文件使用 CP-230012 证书,而第三方依赖项则使用 CP-231522 进行二次签名。

来源:.pipelines/ESRPSigning_core.json1-387 .pipelines/ESRPSigning_installer.json1-52

版本和签名验证

自动验证可确保所有分发的文件都具有正确版本信息和数字签名。验证过程会检查缺失的版本、不正确的版本号和未签名的二进制文件。

来源:.pipelines/versionAndSignCheck.ps168-91

本地化基础设施

PowerToys 通过 Touchdown 本地化系统支持超过 40 种语言,该系统处理 .resx.resw 资源文件。

本地化流水线

本地化过程每天晚上运行一次,以合并新的翻译,并使用伪本地化来测试开发过程中的字符串长度和布局问题。

来源:.pipelines/loc/loc.yml28-40 .pipelines/v2/templates/steps-fetch-and-prepare-localizations.yml7-26

模块开发框架

PowerToys 模块遵循一致的接口模式,允许运行程序发现、加载和管理各个实用程序。每个模块都实现了 PowerToy 接口,并与设置系统和遥测框架集成。

有关实现新模块的详细信息,请参阅创建新的 PowerToy。有关 PowerToys Run 插件的具体信息,请参阅创建 PowerToys Run 插件。有关全面的调试指南,请参阅调试工具

来源:tools/BugReportTool/BugReportTool/BugReportTool.vcxproj1-93 src/common/notifications/notifications.cpp117-132