今天在 GitHub Trending 上看到一个老牌但常青的项目:microsoft/terminal,它是微软官方开源的 Windows Terminal、命令行控制台(conhost)以及相关组件的源码仓库,也是微软"拥抱开源"战略下最具代表性的作品之一。

一、项目概述

Windows Terminal 是微软为命令行用户打造的全新、现代、功能丰富的终端应用。长期以来,Windows 用户被困在古老的 conhost.exe(经典控制台)中,缺乏标签页、Unicode、emoji 等现代终端早已标配的能力。Windows Terminal 的诞生正是为了填补这一空白。

这个仓库实际上包含了多个紧密相关的项目:

  • Windows Terminal:面向用户的现代终端应用(可从 Microsoft Store 安装)
  • Windows Terminal Preview / Canary:预览版与每日构建的尝鲜版本
  • Windows 控制台宿主 conhost.exe:Windows 原生的命令行基础设施,仓库中的代码就是 Windows 系统里 conhost.exe 的真实源码
  • 共享组件:在两个项目间复用的文本渲染、缓冲区、VT 解析器等模块
  • ColorTool 与示例项目:演示如何消费 Windows Console API

核心特性包括:多标签页、富文本、全球化(国际化)支持、高度可配置、主题与样式定制,同时还要满足微软对性能的严苛要求——快速、高效、不吞噬大量内存与电量

值得注意:Windows Terminal 要求 Windows 10 2004(build 19041)或更高版本。

二、技术原理

从历史包袱到重构

要理解 Windows Terminal 的技术选型,必须先理解 conhost.exe 的困境。自 2014 年微软接手 Windows 命令行以来,团队为控制台增加了不少新能力:

但由于控制台的首要目标是向后兼容,团队无法在其上添加标签页、Unicode 文本、emoji 等社区呼声很高的功能。这一根本矛盾催生了全新的 Windows Terminal。

共享组件的现代化

在重构 Windows Console 的过程中,团队对代码库进行了深度现代化改造:

这次改造让 Console 的若干核心组件得以在任意 Windows 终端实现中复用,包括:

  • 基于 DirectWrite 的文本布局与渲染引擎
  • 同时支持 UTF-16 与 UTF-8 的文本缓冲区
  • VT 解析器/发射器(parser/emitter)

技术栈选型:为何坚持 C++

在规划新终端时,团队评估了多种技术栈,最终决定继续投资 C++ 代码库。理由很实际:这样可以在旧的 Console 和新的 Terminal 之间复用上述现代化组件;更进一步,团队意识到可以把 Terminal 的核心构建为可复用的 UI 控件,让其他应用也能集成终端能力。

ConPTY:连接的桥梁

一个容易被误解的点是 OpenConsole.exe——它其实就是本地构建的 conhost.exe。Windows Terminal 正是通过 ConPTY(伪控制台)与命令行程序连接和通信的。这套机制解耦了"终端前端"与"命令行后端",是现代 Windows 终端架构的关键。

三、安装与快速开始

环境要求

  • Windows 10 2004(build 19041)或更高版本

Microsoft Store(推荐)

最省心的方式是直接从 Microsoft Store 安装,可随新版本自动升级。

通过 winget 安装

winget install --id Microsoft.WindowsTerminal -e

依赖支持需要 WinGet 1.6.2631 或更高版本;若要安装 1.18 及以上的稳定版,请确保 WinGet 客户端已更新。

通过 GitHub 手动安装

从仓库的 Releases 页面下载 Microsoft.WindowsTerminal_<versionNumber>.msixbundle,双击安装。若失败可在 PowerShell 中执行:

# 注意:PowerShell 7+ 请先运行
# Import-Module Appx -UseWindowsPowerShell
Add-AppxPackage Microsoft.WindowsTerminal_<versionNumber>.msixbundle

手动安装的版本不会自动更新,需要定期手动安装最新版本以获取修复与改进。

其他非官方渠道

Chocolatey:

choco install microsoft-windows-terminal

Scoop:

scoop bucket add extras
scoop install windows-terminal

尝鲜 Canary 版本

Windows Terminal Canary 是每日构建版本,包含 main 分支最新代码,可抢先体验新特性,但也是最不稳定的版本。它提供 App Installer 分发(支持自动更新,仅限 Windows 11)和便携 ZIP 分发(不自动更新,兼容 Windows 10 19041+ 与 Windows 11)。

四、构建、运行与调试

前置条件

若要从源码构建,需要:

  • Windows 10 2004(build ≥ 10.0.19041.0)或更高版本
  • 在 Windows 设置中启用开发者模式
  • 安装 PowerShell 7 或更高版本
  • 安装 Windows 11(10.0.26100)SDK,版本 ≥ 10.0.26100.8249
  • 安装 VS 2026 版本 18.6 或更高
  • 通过 VS Installer 安装工作负载:Desktop Development with C++WinUI application development
  • 安装 .NET Framework 4.7.2 Targeting Pack 以构建测试项目

使用 WinGet 配置文件一键配置

克隆仓库后,可用 WinGet 配置文件自动搭建环境:

winget configure .config\configuration.winget

命令行构建

在 PowerShell 中:

Import-Module .\tools\OpenConsole.psm1
Set-MsBuildDevEnvironment
Invoke-OpenConsoleBuild

在 Cmd 中:

.\tools\razzle.cmd
bcz

运行与调试

在 Visual Studio 中调试时,右键 CascadiaPackage → 属性 → Debug 菜单,将"Application process"和"Background task process"都改为"Native Only",然后按 F5 构建并调试。

⚠️ 注意:必须选择 “x64” 或 “x86” 平台——Terminal 是 C++ 应用,无法在 “Any CPU” 下构建;也无法通过直接运行 WindowsTerminal.exe 启动。

五、常见问题与解决方案

Q1:我构建并运行了新 Terminal,但它看起来和旧控制台一模一样?

原因是你在 Visual Studio 中启动了错误的解决方案。解决方法:确保构建并部署的是 CascadiaPackage 项目。

Q2:手动安装后提示缺少框架包?

在较老的 Windows 10 版本上,可能需要安装 VC++ v14 桌面框架包

Q3:为什么不能直接运行 WindowsTerminal.exe?

这是设计使然,详见 issue #926#4043。Terminal 依赖打包部署的机制运行。

Q4:winget 安装失败或版本不对?

确保 WinGet 客户端已更新到 1.6.2631 或更高,否则无法正确处理依赖。

六、总结

Windows Terminal 不仅是一个终端应用,更是微软对自身命令行生态一次彻底的现代化重塑。它巧妙地在"向后兼容的老 conhost"与"面向未来的新终端"之间架起桥梁:一方面通过 ConPTY 保持与既有命令行程序的兼容,另一方面借助 DirectWrite 渲染引擎、双编码文本缓冲区与可复用 UI 控件带来标签页、Unicode、真彩色等现代体验。

对开发者而言,这个仓库既是学习大型 C++ 项目工程化(WIL、STL、模块化拆分)的绝佳范本,也是理解 Windows 命令行底层机制的一手资料。如果你是 Windows 上的命令行重度用户,Windows Terminal 早已是不可或缺的生产力工具;如果你是系统级开发者,它的源码同样值得细读。

项目地址:https://github.com/microsoft/terminal