这是用于命令行应用程序的传统 Windows 用户界面。 它处理从任何附加命令行应用程序调用的所有控制台 API 服务。 Windows 控制台还代表所有这些应用程序处理图形用户界面 (GUI) 表示形式。 它以其开源形式作为
conhost.exe
或
openconsole.exe
存在于系统目录中。 它与 Windows 操作系统一起提供。 还可以在从开源存储库构建的其他 Microsoft 产品中找到它,用于
伪控制台
基础结构的最新实现。 根据上面的定义,它既可以按传统的服务器和终端角色进行操作,也可以通过首选的伪控制台基础架构以仅服务器的角色进行操作
。
Windows 终端
这是用于命令行应用程序的新 Windows 界面。 Windows 终端作为使用
伪控制台
区分 API 服务和基于文本的应用程序接口之间的问题的第一方示例,非常类似于所有非 Windows 平台。
Windows 终端是适用于 Windows 的旗舰文本模式用户界面。 它演示了生态系统的功能,并推动了 Windows 开发向与其他平台统一的方向发展。 Windows 终端也是一个示例,说明了如何构建跨 Windows API 和框架的历史和范围的强大而复杂的新式应用程序。 根据上面的定义,此产品作为终端角色进行操作。
主要历史里程碑
控制台子系统的主要历史里程碑可划分为 2014 之前的实现,然后是 2014 年以来执行的工作的概述,当时在 Windows 10 时代形成了对命令行的重新关注。
[1989 年 - 20 世纪 90 年代]
初始控制台主机系统在 Windows 操作系统内作为 DOS 环境的模拟实现。 它的代码与
命令提示符
cmd.exe
纠缠在一起并协作,这是该 DOS 环境的表示形式。 控制台主机系统代码与命令提示符解释器/shell 分担责任并共享权限。 它还为其他命令行实用程序提供了基本级别的服务,以类似于 CMD 的方式执行服务。
CJK 的 DBCS
[1997-1999]
大约在这个时候,引入了
DBCS
支持(“双字节字符集”)来支持 CJK(中文、日文和韩文)市场。 这项工作导致控制台内许多写入和读取方法出现分叉,既提供了处理单字节字符的“西方”版本,也提供了“东方”版本的另一种表示方式,其中需要两个字节来表示大量字符。 此分叉包括将控制台环境中单元格的表示形式扩展为 1 或 2 个单元格宽,其中 1 个单元格为窄(高度大于宽度),2个单元格为宽(全宽),或为正方形,其中可书写典型的中文、日文和韩文象形文字。
安全/隔离
[2005-2009]
具有在关键系统进程
csrss.exe
中运行控制台子系统的经验,注意到将不同访问级别的各种客户端应用程序连接到单个超关键和特权进程特别危险。 在此时代,控制台子系统拆分为客户端、驱动程序和服务器应用程序。 每个应用程序都可以在其自身的上下文中运行,从而减少每个应用程序的责任和权限。 这种隔离提高了系统的总体稳定性,因为控制台子系统中的任何故障都不再影响其他关键过程功能。
用户体验改进
[2014-2016]
在组织内各种团队对控制台子系统进行了长时间的分散维护之后,组建了一支以开发人员为中心的新团队,以主导并推动控制台的改进。 此期间的改进包括:行选择、平滑窗口大小调整、重新排列文本、复制和粘贴、高 DPI 支持以及对 Unicode 的关注,其中包括融合“西方”和“东方”存储和流操作算法之间的拆分。
虚拟终端客户端
[2015-2017]
随着
适用于 Linux 的 Windows 子系统
的出现,Microsoft 致力于改善
Windows 上 Docker
的体验、将
OpenSSH
作为首选命令行远程执行技术的采用以及将
虚拟终端序列
引入控制台主机的初始实现。 这样一来,现有控制台就可以充当终端,直接连接到各自环境中的那些 Linux 本机应用程序,将图形和文本属性呈现给显示器,并以适当的方言返回用户输入。
虚拟终端服务器
[2018]
在过去的二十年里,我们创建了收件箱控制台主机的第三方替代产品,以提高开发人员工作效率,并主要关注丰富的自定义项和选项卡式界面。 这些应用程序仍需要运行并隐藏控制台主机窗口。 当主命令行客户端应用程序运行时,它们作为辅助“客户端”应用程序附加以在轮询循环中擦除缓冲区信息。 他们的目标是成为一个终端,就像在其他平台上一样,但在 Windows 世界中,终端是不可替代的。
在此时间段内,引入了
伪控制台
基础结构。 伪控制台允许任何应用程序在非交互模式下启动控制台主机,并成为用户的最终终端界面。 这项工作的主要限制是 Windows 的持续兼容性承诺,即将来无限期地为所有已发布的
Windows 控制台 API
提供服务,同时提供与所有其他平台上的预期内容相匹配的替代服务器托管接口:
虚拟终端序列
。 因此,这项工作执行了客户端阶段的镜像:伪控制台将显示在屏幕上的内容作为委派主机的虚拟终端序列进行投影,并将响应解释为 Windows 格式的输入序列,以供客户端应用程序使用
。
未来的路线图
终端应用程序
[2019 - 现在]
这是控制台子系统的开源时代,主要关注新的 Windows 终端。 Windows 终端在 2019 年 5 月的 Microsoft Build 大会期间宣布发布,它完全位于 GitHub 的
microsoft/terminal
上。 在
伪控制台
的优化平台之上构建 Windows 终端应用程序将成为这个时代的重点,它将直接为 Windows 平台的开发人员带来一流的终端体验。
Windows 终端
不仅旨在展示该平台(包括
WinUI
接口技术、
MSIX
打包模型和
C++/WinRT
组件体系结构),还可作为平台本身的验证
。 Windows 终端推动 Windows 组织根据需要开放和发展应用平台,以继续提升开发人员的工作效率。 Windows 终端独特的一组高级用户和开发人员要求推动了新式 Windows 平台满足这些市场对 Windows 的真正需求。
在 Windows 操作系统中,这包括从其默认位置
注销经典控制台主机用户界面
,以支持
Windows 终端
、
ConPTY
和
虚拟终端序列
。
最后,无论是 Windows 终端产品还是其他替代终端,这个时代都计划在默认体验上提供全面的选择。
客户端支持库
[未来]
借助客户端上
虚拟终端序列
的支持和文档,我们强烈建议 Windows 命令行实用程序开发人员首先使用虚拟终端序列,而不是使用经典 Windows API,以获得所有平台的统一生态系统的优势。 但是,一个重要的缺失是,其他平台具有大量的客户端帮助程序库,用于处理输入(如
readline
)和图形显示(如
ncurses
)。 这个特定的未来路线图元素表示对生态系统所提供的内容的探索,以及如何通过经典的控制台 API 加快在 Windows 命令行应用程序中采用虚拟终端序列的速度。
[未来]
虚拟终端客户端和服务器实现的组合允许客户端命令行和终端托管应用程序的完全混合和匹配。 这种组合可以与经典
Windows 控制台 API
或
虚拟终端序列
通信,但是,将其转换为经典兼容的 Windows 方法,然后再返回到更通用的虚拟终端方法会产生开销。
市场充分采用 Windows 上的虚拟终端序列和 UTF-8 后,可以选择禁用控制台主机的转换/解释作业
。 然后,控制台主机将成为简单的 API 调用服务程序,并通过
伪控制台
从设备调用中继到托管应用程序。 此更改将提高性能,并最大程度地增加可在客户端应用程序和终端之间使用的序列方言。 通过此更改,将启用其他交互方案,并(最终)使 Windows 世界与命令行应用程序空间中所有其他平台的系列保持一致
。
即将推出:在整个 2024 年,我们将逐步取消以“GitHub 问题”作为内容的反馈机制,并将其替换为新的反馈系统。 有关详细信息,请参阅:
https://aka.ms/ContentUserFeedback
。
提交和查看相关反馈