菜单

构建和部署管道

相关源文件

本文档涵盖了 PowerToys 的自动化构建和部署基础设施,包括 CI/CD 管道、代码签名流程、本地化工作流程和分发机制。该管道确保 PowerToys 发行版的代码质量、安全合规性和多语言支持。

有关安装方法和面向用户的更新机制的信息,请参阅 安装方法更新系统

概述

PowerToys 构建和部署管道是一个全面的自动化系统,可将源代码转换为已签名、本地化和可分发的软件包。该管道集成了多个 Microsoft 企业服务,以确保安全、本地化和分发合规性。

来源: .pipelines/ESRPSigning_core.json .pipelines/ESRPSigning_installer.json .pipelines/versionAndSignCheck.ps1 .pipelines/loc/loc.yml

构建流程

构建过程使用 MSBuild 和自定义目标及模板来编译 PowerToys 解决方案。该系统包括针对不同模块类型和 WinUI3 应用程序的专用构建配置。

MSBuild 配置

PowerToys 使用分层 MSBuild 配置系统,通过 Directory.Build.targets 文件来为不同组件自定义构建过程

组件类型构建目标目的
根目录Directory.Build.targets全局构建设置和 Microsoft.Build.CopyOnWrite SDK
键盘管理器src/modules/keyboardmanager/Directory.Build.targets使用 convert-resx-to-rc.ps1 生成资源文件
设置 UIsrc/settings-ui/Directory.Build.targetsWinUI3 特定构建优化

根目录的 Directory.Build.targets 集成了 Microsoft 的构建缓存优化

来源: Directory.Build.targets1-6 src/modules/keyboardmanager/Directory.Build.targets src/settings-ui/Directory.Build.targets

资源生成

Keyboard Manager 模块包含一个专门的构建目标,用于将 .resx 文件转换为 Windows RC 格式,以便与原生 C++ 集成

src/modules/keyboardmanager/Directory.Build.targets4-6

此过程使用 convert-resx-to-rc.ps1 脚本,从基础资源模板生成 resource.hKeyboardManager.rc 文件。

来源: src/modules/keyboardmanager/Directory.Build.targets4-6

代码签名过程

PowerToys 使用 Microsoft 的 ESRP(企业签名和发布流程)系统来实现企业级代码签名。签名过程通过两个 JSON 配置文件进行配置,这些文件为核心组件和安装程序指定了不同的签名策略。

核心组件签名

ESRPSigning_core.json 配置定义了 224 个 PowerToys 组件的签名,这些组件分为两个签名批次

批次 1 (KeyCode CP-230012):PowerToys 自主创建的二进制文件,包括

  • 主可执行文件:PowerToys.exePowerToys.Settings.exe
  • 模块接口和实现
  • 预览处理程序和缩略图提供程序
  • WinUI3 应用程序和 MSIX 包

批次 2 (KeyCode CP-231522):第三方库和依赖项

  • 运行时库:ModernWpf.dllNewtonsoft.Json.dllWebView2Loader.dll
  • Windows App SDK 组件
  • Visual C++ 可再发行组件

签名参数

两个签名操作都使用一致的参数来确保安全和合规性

参数目的
OpusName"Microsoft"发布者标识
OpusInfo"http://www.microsoft.com"发布者 URL
FileDigest“/fd SHA256”SHA-256 文件摘要算法
PageHash“/NPH”禁用页面哈希以提高性能
TimeStampRFC3161 时间戳服务器时间戳验证

来源: .pipelines/ESRPSigning_core.json226-264 .pipelines/ESRPSigning_installer.json11-50

版本和签名验证

versionAndSignCheck.ps1 脚本提供了构建输出的自动验证,以确保所有二进制文件都具有正确的版本和有效的代码签名。

异常列表

验证脚本维护了经过筛选的组件异常列表,这些组件拥有合法的不同版本模式

版本异常 .pipelines/versionAndSignCheck.ps111-29:Windows App SDK 投影和使用 0.0.0.01.0.0.0 版本的第三方组件。

Null 版本异常 .pipelines/versionAndSignCheck.ps130-52:不包含版本资源的系统库和可再发行组件。

来源: .pipelines/versionAndSignCheck.ps168-96

本地化管道

PowerToys 通过 Microsoft 的 Touchdown Build 本地化系统支持 40 多种语言。本地化管道按计划运行,并处理整个代码库中的资源文件。

资源文件模式

本地化系统处理三种类型的资源文件

模式文件类型用途
**\Resources.resx.NET 资源文件Windows Forms 和 WPF 组件
**\Resource.resx.NET 资源文件单个模块资源
**\Resources.reswUWP 资源文件WinUI3 应用程序和 UWP 组件

Touchdown Build 配置

本地化管道使用以下 Touchdown Build 配置

  • 团队 ID:37400 (PowerToys 本地化团队)
  • 身份验证:SubjectNameIssuer 通过 TouchdownServiceConnection
  • 伪本地化:包含用于测试
  • 输出结构:通过 appendRelativeDir: true 保留相对目录结构

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

安全与合规

构建管道集成了多项安全和合规机制,以确保 PowerToys 符合 Microsoft 的安全标准。

TSA 配置

团队安全顾问 (TSA) 配置文件定义了安全扫描和分析参数

此配置会将安全分析结果路由到 Windows 组织结构内的 PowerToys 团队。

来源: .pipelines/tsa.json1-7

分发和打包

构建管道会生成多种分发格式,以支持不同的安装场景和用户偏好。每种格式都经过相同的严格构建和签名过程,但面向不同的分发渠道。

分发格式目标渠道包类型主要用例
WiX 安装程序GitHub Releases引导程序 .exe + .msi手动安装、企业部署
MSIX 包Microsoft Store.msixStore 分发、自动更新
WinGet 包Windows Package Manager清单 + 安装程序命令行包管理

两个 ESRP 签名配置中的签名组件被打包成这些分发格式,确保了所有渠道上一致且安全的分发体验。

来源: .pipelines/ESRPSigning_core.json .pipelines/ESRPSigning_installer.json