news 2026/9/8 15:51:34

PowerToys 开发者文档全指南:从零搭建 Windows 工具集开发环境到构建、调试与打包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PowerToys 开发者文档全指南:从零搭建 Windows 工具集开发环境到构建、调试与打包

PowerToys 开发者文档全指南:从零搭建 Windows 工具集开发环境到构建、调试与打包

【免费下载链接】PowerToysMicrosoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys

PowerToys 是微软开源的一套 Windows 生产力工具集合(当前仓库根目录见 README.md),包含 FancyZones、PowerRename、PowerToys Run、键盘管理器等数十个模块。本文以仓库中面向开发者的总入口文档 doc/devdocs/readme.md 为骨架,系统梳理贡献者与二次开发者从「获取代码 → 一键配置环境 → 构建 → 调试 → 新增模块 → 提交 PR → 打包安装器」的完整路径,并结合仓库内的构建脚本、.vsconfig与 WinGet 配置源码逐项验证,帮助你在本地把整套工具集跑起来并参与到迭代中。

一、文档体系与开发入口

仓库在doc/devdocs/下维护了一份面向开发者的完整文档树,doc/devdocs/readme.md 是这份文档的总入口,按「起步(Getting Started)」「开发规范(Development Guidelines)」「协作规则(Rules)」「GitHub 工作流」「核心架构(Core Architecture)」「公共组件(Common Components)」「工具(Tools)」「流程(Processes)」等板块组织,直接对应到仓库的三大类工程:

  • 原生 C++/WinUI 工程:由 PowerToys.slnx 统一管理,涵盖 runner(托盘主进程)、各个原生模块与安装器;
  • 托管 .NET 工程:如 Settings UI、若干 C# 模块,分布在src/下;
  • 打包与部署工程installer/下的 Bootstrapper(EXE)与 MSI(WiX)工程。

建议按本指南顺序先打通「构建 → 运行 → 调试」最小闭环,再结合 创建新 PowerToy 指南 深入模块开发。

二、前置条件(Prerequisites)

原文档明确列出的系统级要求如下,这是能否成功编译的前提:

  1. 操作系统:Windows 10 April 2018 Update(版本 1803)或更高版本;
  2. Visual Studio:推荐 VS 2026,或 Visual Studio 2022 17.4+,且必须安装以下工作负载/组件:
    • 使用 C++ 的桌面开发(Desktop Development with C++)
    • WinUI 应用程序开发
    • .NET 桌面开发
    • Windows 11 SDK(10.0.22621.0)
    • Windows 11 SDK(10.0.26100.3916)
  3. .NET 8 SDK
  4. Windows 长路径支持:开启后避免源码树深路径导致编译失败。

这些组件并非随手可选,仓库根目录的 .vsconfig 文件精确记录了 PowerToys 构建所需的 VS 组件清单,其中不仅包含上述工作负载,还列出了Microsoft.VisualStudio.Component.VC.ATL(含 ARM64/Spectre 变体)、Microsoft.VisualStudio.Component.VcpkgWindowsAppSdkSupport.CSharp/Cpp等关键项。你可以直接让 Visual Studio Installer 导入该文件,比手动勾选更可靠。

小贴士(来自原文档):仓库在 .config 目录下提供了 WinGet 配置文件,可用一条命令自动安装全部 VS 工作负载:

winget configure .config\configuration.winget

按你的 VS 版本选择对应文件,例如.config\configuration.vsProfessional.winget(VS Professional)或.config\configuration.vsEnterprise.winget(VS Enterprise)。

从仓库内容看,这一「一键装环境」不只是口头建议——.config/configuration.winget 是一个基于 WinGet Configuration(DSC)的真实可执行配置:它依次声明「启用开发者模式(WindowsSettings 资源,elevated)」「通过 winget 源安装 Visual Studio Community(WinGetPackage 资源)」「随后用 VSComponents 资源加载仓库根目录的 .vsconfig 完成组件安装」,并在文件尾部明确提示下一步手动执行git submodule update --init --recursive。也就是说,WinGet 配置负责解决工具链,子模块仍由 Git 层完成。

三、获取代码:Fork、Clone 与子模块初始化

原文档给出的标准协作流程是:

  1. 在 GitHub 上 Fork 本仓库;
  2. 将你自己的 Fork Clone 到本地;
  3. 运行仓库自带的自动化环境配置脚本(推荐):
    .\tools\build\setup-dev-environment.ps1

setup-dev-environment.ps1 到底做了什么

我阅读了 tools/build/setup-dev-environment.ps1 的完整实现,脚本会按顺序执行 4 步,并且幂等、可重复运行:

  • 启用 Windows 长路径:通过写注册表项HKLM:\SYSTEM\CurrentControlSet\Control\FileSystemLongPathsEnabled = 1实现(需要管理员权限);
  • 启用 Windows 开发者模式:通过写注册表项HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlockAllowDevelopmentWithoutDevLicense = 1实现(需要管理员权限);
  • 安装 .vsconfig 中要求的 VS 组件:使用本机 Visual Studio Installer 接口按组件清单补齐工作负载;
  • 初始化 git 子模块:执行git submodule update --init --recursive

脚本支持-Help查看全部参数。从参数定义(tools/build/setup-dev-environment.ps1)可以看到可跳过任一步骤的开关:-SkipLongPaths-SkipDevMode-SkipVSComponents-SkipSubmodules,以及自定义 VS 安装路径的-VSInstallPath。原文档的 PowerShell 注释进一步说明:非管理员运行时脚本会在涉及注册表/组件安装的步骤自动触发 UAC 提权;仓库根目录通过向上查找PowerToys.slnx自动定位,因此可以从任意子目录调用。

手动搭建的替代路径

若不想用脚本(原文档也提供了折叠起来的手动流程):

  1. 用 Visual Studio 打开根目录的PowerToys.slnx
  2. 若解决方案资源管理器弹出「install extra components」对话框,点击 install;
  3. 或在 Visual Studio Installer 中导入仓库根目录的 .vsconfig 自动安装全部工作负载;
  4. 手动初始化子模块(一次性步骤,绝大多数工程编译前必须执行):
    git submodule update --init --recursive

代码中很多跨仓库依赖(如 Monaco、外部组件)都以 git submodule 形式挂接,跳过此步会导致大量工程无法还原 NuGet/vcpkg 依赖,这是新手最常见的构建失败原因。

四、编译 PowerToys:Visual Studio 与命令行双路径

原文档提供了两种构建方式,均以仓库根目录的解决方案文件 PowerToys.slnx 为编译入口。

方式一:Visual Studio IDE

  • 用 VS 打开PowerToys.slnx
  • 在顶部「解决方案配置」下拉框中选择ReleaseDebug
  • 从「生成」菜单选择「生成解决方案」,或直接按Ctrl+Shift+B
  • 首次完整编译通常需要数分钟(取决于机器性能),完成后产物位于仓库下的x64\Release\目录。

需要注意的模块可用性边界(原文档明确提醒):编译完成后可直接运行x64\Release\PowerToys.exe而无需安装 PowerToys,但部分模块(如 PowerRename、ImageResizer、文件资源管理器扩展等)必须额外构建并安装 installer 后才能生效。这是因为这些能力依赖外壳扩展注册与 MSIX/WiX 部署流程,光跑主程序并不会把它们注册进系统。

方式二:命令行构建脚本

仓库在 tools/build/ 下集中了构建工具链,核心脚本与用法如下:

# 构建完整解决方案(自动探测平台) .\tools\build\build.ps1 # 指定平台与配置构建 .\tools\build\build.ps1 -Platform x64 -Configuration Release # 仅构建核心工程(runner + settings),加快本地迭代 .\tools\build\build-essentials.ps1 # 构建包含安装器在内的一切(仅 Release) .\tools\build\build-installer.ps1

从源码进一步印证脚本的行为与参数语义:

  • tools/build/build.ps1 是面向「当前目录下工程」的轻量包装器:它会 dot-source 同目录的build-common.ps1,先调用Ensure-VsDevEnvironment定位并加载 VS 开发环境,未传-Platform时通过Get-DefaultPlatform自动探测主机平台;-Configuration默认值为Debug;可用-Path指定含.sln/.csproj/.vcxproj的目标目录;-RestoreOnly开关可只做包还原;额外位置参数会被透传给 MSBuild(例如'/p:CIBuild=true'),便于对接 CI 或私有构建属性(对应 tools/build/build.ps1 的参数定义)。

  • tools/build/build-essentials.ps1 用于「快速迭代」场景:先对PowerToys.slnx执行 NuGet 还原,再只编译两个关键工程——原生 runner(.\src\runner\runner.vcxproj)与设置 UI(.\src\settings-ui\Settings.UI\PowerToys.Settings.csproj),并注入/p:SolutionDir=...。也就是说,只改 runner 或 Settings 相关代码时,用这个脚本比全量构建快得多。它也支持-Platform arm64在 x64 机器上交叉产出 ARM64 版本(对应 tools/build/build-essentials.ps1)。

  • 完整的构建/CI 细节可进一步阅读 tools/build/BUILD-GUIDELINES.md,其中涵盖了更底层的构建规范与辅助脚本说明。

五、调试与新模块开发入口

完成一次成功构建后,推荐按下面两个官方文档深入:

  • 调试专题:Debugging 覆盖 Visual Studio 调试器配置、附加到子进程的方法(PowerToys 是「runner + 各模块子进程」架构,很多模块需要 attach 到子进程才能断点命中),以及常见构建错误的排查。
  • 新增一个 PowerToy:Creating a New PowerToy 是一份端到端指南,涵盖模块架构、设置项接入、安装器打包与测试。

如果你想为Command Palette(命令面板)编写扩展,原文档指向其独立扩展性文档(仓库文档中以 aka.ms 短链给出),介绍如何创建、打包并分发与 Command Palette 集成的自定义扩展。结合仓库可以快速定位:命令行相关源码位于 src/modules/cmdpal(其中ExtensionTemplate/TemplateCmdPalExtension/.vsconfig还自带一份扩展工程模板的 VS 组件清单),可当作最小扩展样例来对照阅读。

六、开发规范、代码风格与测试要求

原文档在「Development Guidelines」和「Rules」两节给出了硬性约定,归纳如下:

  • 编码指南与最佳实践:Coding Guidelines
  • 代码格式与风格约定:Coding Style
  • 日志与遥测:Logging and Telemetry
  • 多语言本地化:Localization
  • UI 测试编写:UI Testing
  • 用 VS Code 开发:Developing with VS Code

Rules 一节原文给出的核心规则是:

  • Follow the pattern of what you already see in the code.(沿用仓库既有代码模式)——PowerToys 仓库同时含 C++/WinRT、C#/WinUI 等多套技术栈,紧跟既有实现是最重要的兼容性保障;
  • 遵守 编码风格;
  • 尽量把新功能/组件封装进「接口定义清晰」的库;
  • 扩展既有代码时,把新功能封装成类,或把旧功能重构成类;
  • 凡是新增/修改类与方法,都要补充或更新单元测试。

该规则与仓库实际的测试布局吻合:例如src/common/UnitTests-CommonUtilssrc/modules/cmdpal下的各类单测工程,以及src/settings-ui/Settings.UI.UnitTests等,说明测试是代码合入的强约束而非可选建议。

七、GitHub 协作工作流与 PR 提交规范

原文档定义了社区贡献者需要遵守的协作流程,直接引用如下要点:

  • 开工前:确保存在一个追踪该修复/特性的 issue;
  • 若你具备权限,为 issue 添加In progress标签,并补充Cost-Small/Medium/Large工作量评估及合适的标签;社区贡献者无权限打标签时,只需在 issue 下评论说明已开始工作,并尽量给出交付时间预估;
  • 若工作量较大(Medium/Large),用 Markdown 任务清单列出每个子项,完成后勾选更新;
  • 开 PR 前必须确保本地构建成功且功能测试通过。文档特别强调这对 AI 辅助(vibe coding)贡献尤其重要——必须验证 AI 生成的代码确实能工作;仅用于讨论的探索性 PR 或 draft PR 除外;
  • 开 PR 时遵循 PR 模板;
  • 需要团队评审时(即使工作尚未 100% 完成),把 PR 标记为Ready For Review;评审可能要经过多轮往返,最终目标是得到可合并、可测试、符合规范的代码;
  • PR 批准后:由 PR 作者负责合并;社区贡献者的 PR 可由批准的 reviewer 代为合并;
  • 合并方式优先使用Squash and merge;若提交在逻辑上相互独立而不宜 squash,则使用Rebase and merge
  • 可在 PR 描述中使用 GitHub 的 closing keywords(如Fixes #123)让 PR 合入时自动关闭关联 issue。

仓库还维护了便于协作的辅助资源:Issue/PR 命令(自动化机器人指令)与 aka.ms 短链接清单。

八、核心架构:从文档到代码的导航

原文档为开发者提供了按主题组织的架构文档索引,转换为仓库根目录相对路径后如下:

  • Architecture Overview:PowerToys 整体架构与模块接口总览;
  • Runner and System Tray:PowerToys Runner 主进程(系统托盘宿主)细节;
  • Settings:设置系统文档;
  • Installer:安装器工作原理;
  • Modules:各模块文档入口。

架构的关键在于「Runner 单进程常驻 + 按需加载各模块」的分发模型,这可以在代码层得到印证:

  • 主进程源码集中在 src/runner,其中 src/runner/main.cpp 负责进程启动与模块调度,src/runner/powertoy_module.cpp 定义了模块生命周期管理,而 src/runner/tray_icon.cpp 实现系统托盘交互;
  • 各模块实现统一的模块接口(native 模块契约见 src/common/interop,托管模块契约见 src/common/PowerToys.ModuleContracts,其中IModuleService.cs定义了服务接口),这也是「把新功能封装进接口清晰库」规则的落地基础。

对独立模块逐一深入前,建议先阅读 Modules 与各模块子文档(如 FancyZones、PowerRename、PowerToys Run、Mouse Without Borders 等均有专属文档)。

公共组件(Common Components)

  • Context Menu Handlers:PowerToys 如何实现并注册文件资源管理器右键菜单处理器;
  • Monaco Editor:多个模块如何复用 Monaco 代码编辑器组件(仓库中对应 src/Monaco 与src/common/FilePreviewCommon/MonacoHelper.cs的封装)。

九、工具与流程(Tools & Processes)

原文档在 Tools 板块汇总了辅助开发与质量保障的工具:

  • Tools 总览
  • Bug Report Tool:收集日志与系统信息的 bug 上报工具(工程位于 tools/BugReportTool);
  • Debugging Tools:专项调试工具;
  • Fuzzing Testing:如何对 PowerToys 模块实施模糊测试(仓库也内置了相关模糊测试基础设置,可参见 src/Common.Dotnet.FuzzTest.props);
  • 构建类工具直接使用 tools/build/ 下脚本(含证书管理 cert-management.ps1、打包签名 cert-sign-package.ps1 等)。

Processes 板块则面向发布与治理环节:

  • Release Process:PowerToys 版本发布如何准备与推送;
  • Update Process:内置更新机制如何工作(代码侧参考 src/common/updating 与 src/runner/UpdateUtils.cpp);
  • GPO Implementation:组策略对象实现细节(对应 src/gpo 与src/common/GPOWrapper)。

十、构建安装器:EXE + MSI 两段式打包

PowerToys 的安装器由两部分组成(原文档明确说明):

  • EXE(Bootstrapper):内嵌 MSI,处理更复杂的安装逻辑——负责安装全部前置依赖并通过 MSI 安装 PowerToys,还支持安装参数/开关;
  • MSI:安装 PowerToys 本体二进制。

编译前提

安装器只能在Release模式下编译,且步骤 1、2 必须在 MSI 编译前完成。官方给出的完整顺序是:

  1. 编译 PowerToys.slnx(方法见上文第四节);
  2. 编译 BugReportTool 工具,路径tools\BugReportTool\BugReportTool.sln→ 仓库相对路径 tools/BugReportTool/BugReportTool.sln;
  3. 编译 StylesReportTool 工具,路径tools\StylesReportTool\StylesReportTool.sln→ 仓库相对路径 tools/StylesReportTool/StylesReportTool.sln;
  4. 编译安装器解决方案installer\PowerToysSetup.slnx→ 仓库相对路径 installer/PowerToysSetup.slnx。

更详细的安装器构建与调试方法见 Installer。若想在本地跑完整打包流水线,也可以直接调用 tools/build/build-installer.ps1:从脚本注释可知它默认以x64 + Release + PerUser(true)构建并打包 CmdPal 与安装器,处理签名(通过 tools/build/cert-sign-package.ps1)与 WiX 生成,产物输出在installer/PowerToysSetupVNext/[Platform]/[Configuration]/User[Machine]Setup下;在其它机器上安装前需用 tools/build/cert-management.ps1 导出签名证书并在目标机器上信任。若需在非本仓库机器运行完整安装流程,可参考仓库内 test-winget-install-locally 指南。

十一、给新贡献者的速查清单

综合原文档全部章节,收敛出一份可直接照做的上手清单:

  1. 确认系统满足前置条件(Win10 1803+、VS 2026/VS2022 17.4+ 且含 .vsconfig 所列组件、.NET 8 SDK、长路径已开启);
  2. Fork 并 Clone 仓库;
  3. 运行 tools/build/setup-dev-environment.ps1(或winget configure .config\configuration.winget)完成环境与子模块初始化;
  4. 在 VS 中打开 PowerToys.slnx 选择Release/Debug构建,或使用 tools/build/build.ps1/build-essentials.ps1;
  5. 运行x64\Release\PowerToys.exe验证主程序;需要外壳扩展类模块时补做安装器构建与安装;
  6. 开发前阅读 调试文档 与 新模块开发指南,并严格遵守 编码指南、编码风格 与「改代码必带测试」的规则;
  7. 提交 PR 前本地构建 + 测试通过,标记 Ready For Review,合入采用 Squash/ Rebase and merge;
  8. 涉及打包时,按第八节顺序依次编译解决方案与安装器工程。

【免费下载链接】PowerToysMicrosoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 15:50:27

VS Code AI Chat实战指南:从Copilot到本地模型,附配置与避坑技巧

你别说,“VS Code 的 AI Chat 现在已经这么能干了?”这句话,是我上周凌晨两点对着屏幕脱口而出的。以前我有个根深蒂固的偏见:IDE 里的 AI 聊天不就是个高级搜索引擎吗,问一句答一段,最后代码还得自己动手改…

作者头像 李华
网站建设 2026/9/8 15:47:53

RPCS3:十分钟在电脑上跑通PS3游戏的完整设置流程

RPCS3:十分钟在电脑上跑通PS3游戏的完整设置流程 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 把游戏的ISO拖进列表,点播放,几秒后加载画面就出来了——这就…

作者头像 李华
网站建设 2026/9/8 15:47:32

实测帧率提升 12.6%:tiny11builder 精简 Windows 11 完整指南

实测帧率提升 12.6%:tiny11builder 精简 Windows 11 完整指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 平均帧率提升 12.6%、安装镜像缩水 52%—…

作者头像 李华
网站建设 2026/9/8 15:47:11

单北斗如何提升桥梁形变监测精度:从坐标框架到工程实践

1. 为什么桥梁监测现场会优先选单北斗——坐标框架和差分一致性两个理由前几年我们团队接手一座跨江大桥的长期形变评估项目。业主要求在桥墩和主梁关键点位布设GNSS监测站,水平精度要优于2毫米,垂直要向5毫米内靠。起初我们按惯常思路,用GPS…

作者头像 李华
网站建设 2026/9/8 15:45:26

ITIL4服务目录管理实战:从救火队运维转型为服务专家

IT 运维团队最怕的是什么?不是半夜的告警,不是宕机,而是辛辛苦苦忙了一整年,年底一复盘,老板只记得“你们天天在救火”。这说的是“救火队”式 IT 运维——一切围绕突发事件转,哪里有故障冲向哪里&#xff…

作者头像 李华