本文档概述了 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 | 已禁用 | 完整版 |
| 发布 | MultiThreaded | MaxSpeed | 优化 |
在开发构建期间,使用 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
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