共用方式為


Windows 主控台和終端機生態系統藍圖

本檔是 Windows 控制台和 Windows 終端機產品的高階藍圖。 涵蓋範圍:

  • Windows 控制台和 Windows 終端機如何融入跨 Windows 和其他作系統的命令行應用程式生態系統。

  • 產品、功能和策略的歷程記錄和未來藍圖,這些藍圖是建置平臺的一部分,以及為此平臺建置的一部分。

Microsoft目前控制台/終端機時代的重點是將一流的終端機體驗直接帶入 Windows 平臺上的開發人員,並逐步淘汰傳統 Windows 控制台 API,並以虛擬終端機序列取代它們,以使用 pseudoconsole虛擬終端機序列取代它們。 Windows 終端機 展示此轉換為一流的體驗,邀請開發人員社群的 開放原始碼共同 作業,支援用戶端命令行和終端機裝載應用程式的混合和比對,以及將 Windows 生態系統與所有其他平臺整合。

定義

建議您先熟悉此空間中使用的通用術語 定義 ,再繼續進行。 常見術語包括:命令行(或控制台)應用程式標準句柄(STDINSTDOUTSTDERR、TTY 和 PTY 裝置用戶端和伺服器控制檯子系統控制台主機虛擬console終端機

建築

系統的一般架構分為四個部分:用戶端、裝置、伺服器和終端機。

從客戶端到裝置到伺服器到終端機執行的命令行通訊流程圖來源

客戶

用戶端是命令行應用程式,使用文字型介面讓使用者輸入命令(而不是以滑鼠為基礎的使用者介面),並傳回結果的文字表示法。 在 Windows 上,控制台 API 提供用戶端與裝置之間的通訊層。 (這也可以是具有裝置控制 API 的標準控制台句柄。

裝置

裝置是兩個進程、用戶端和伺服器之間的中繼訊息處理通訊層。 在 Windows 上,這是控制台驅動程式。 在其他平臺上,它是 TTY 或 PTY 裝置。 如果整個交易是純文本或包含 虛擬終端機序列,但不是使用 Windows 主控台 API,檔案、管道和套接字等其他裝置可能會作為此通道。

伺服器

伺服器會解譯來自用戶端的要求 API 呼叫或訊息。 在傳統作業模式的 Windows 上,伺服器也會建立使用者介面,以將輸出呈現至畫面。 伺服器會額外收集輸入,以透過驅動程式將回應訊息傳回給用戶端,就像相同模組中配套的終端機一樣。 使用 pseudoconsole 模式,而是翻譯工具,在 虛擬終端機序列 中向附加終端機呈現這項資訊。

終端機

終端機是最後一層,為使用者提供圖形顯示和互動服務。 它負責擷取輸入,並將其編碼為 虛擬終端機序列,最終會到達用戶端的 STDIN。 它也會接收和譯碼它從用戶端STDOUT接收的虛擬終端機序列,以便在螢幕上呈現。

進一步連線

做為增補,可將多個角色的應用程式鏈結至其中一個端點,以執行進一步的連線。 例如,SSH 會話有兩個角色:它是在一部裝置上執行的命令行應用程式的 終端 機,但它會將所有已接收的信息轉送至另一部裝置上的 用戶端 角色。 此鏈結可能會無限期地跨裝置和內容進行,提供廣泛的案例彈性。

在非 Windows 平臺上, 伺服器終端 機角色是單一單位,因為不需要 API 集與 虛擬終端機序列之間的轉譯相容性層。

Microsoft產品

所有Microsoft Windows 命令行產品現在都可在開放原始碼存放庫 microsoft/終端機的 GitHub 上取得。

Windows 主機主機

這是命令行應用程式的傳統 Windows 使用者介面。 它會處理從任何附加命令行應用程式呼叫的所有控制台 API 服務。 Windows 主控台也會代表所有這些應用程式處理圖形使用者介面 (GUI) 表示法。 其位於系統目錄中,其為 conhost.exe,或 openconsole.exe 在其開放原始碼窗體中。 它隨附於 Windows作系統。 您也可以在其他從開放原始碼存放庫建置的Microsoft產品中找到,以取得 虛擬console 基礎結構的更 up-to日期實作。 根據上述定義,它會透過慣用 的虛擬console 基礎結構,以傳統方式在合併的伺服器和終端機角色或僅限伺服器角色中運作。

Windows 終端機

這是命令行應用程式的新 Windows 介面。 Windows 終端機是使用 pseudoconsole 來分隔 API 服務與文字型應用程式介面之間的疑慮的第一方範例,這與所有非 Windows 平台類似。

Windows 終端機是適用於 Windows 的旗艦文字模式用戶介面。 它示範生態系統的功能,並推動 Windows 開發與其他平臺整合。 Windows 終端機也是如何建置健全且複雜的新式應用程式,以跨越 Windows API 和架構的歷程記錄和範圍。 根據上述定義,此產品會在終端機角色中運作。

重大歷史里程碑

控制檯子系統的主要歷史里程碑在 2014 年之前分成實作,然後進入自 2014 年以來所執行工作的概觀,而當更新的命令行焦點是在 Windows 10 時代形成時。

初始實作

[1989-1990s] 初始控制台主機系統實作為 Windows作系統內 DOS 環境的模擬。 其程式代碼會與 命令提示字元糾纏並合作, cmd.exe也就是該 DOS 環境的表示法。 主機系統程式代碼會與命令提示字元解釋器/殼層共用責任和許可權。 它也會為其他命令行公用程式提供基本層級的服務,以類似 CMD 的方式執行服務。

適用於 CJK 的 DBCS

[1997-1999] 在此期間, DBCS 支援(“雙位元組字元集”)推出以支援中日韓兩國市場。 這項工作會導致主控台內許多撰寫和讀取方法的分割,以提供兩個「西部」版本來處理單位元組位元,以及「東部」版本的替代表示法,其中需要兩個字節來代表大量的字元數位。 此分割包括控制台環境中單元格的展開表示法,範圍是 1 或 2 個儲存格,其中 1 個儲存格是窄的(高於寬),2 個單元格是寬的、全角的,或者可以刻有一個典型的中文、日文和韓文表義字的方塊。

安全性/隔離

[2005-2009] 控制檯子系統體驗在關鍵系統進程內執行, csrss.exe在各種存取層級連接各種用戶端應用程式時,會注意到單一超關鍵和特殊許可權的程序特別危險。 在此時代,主控台子系統已分割成客戶端、驅動程式和伺服器應用程式。 每個應用程式都可以在自己的內容中執行,減少每個應用程式的責任和許可權。 這種隔離增加了系統的一般健全性,因為控制檯子系統中的任何失敗都不再影響其他重要的程式功能。

用戶體驗改善

[2014-2016] 經過長時間分散的控制檯子系統維護之後,整個組織的各種小組組成了以開發人員為主的新小組,以擁有並推動控制台中的改進功能。 這段期間的改善包括:行選取、平滑視窗重設大小、重排文字、複製和貼上、高 DPI 支援,以及 Unicode 的焦點,包括「西部」與「東部」儲存與串流作演算法之間的分割聚合。

虛擬終端機用戶端

[2015-2017] 隨著 適用於Linux的 Windows 子系統的到來,Microsoft努力改善 Windows 上的 Docker 體驗,並採用 OpenSSH 作為頂級命令行遠端執行技術,將 虛擬終端機序列 的初始實作引入控制台主機。 這可讓現有的控制台作為終端機,直接附加至各自環境中的Linux原生應用程式,將圖形化和文字屬性轉譯為顯示,並在適當的方言中傳回用戶輸入。

虛擬終端機伺服器

[2018] 在過去 20 年中,已建立收件匣控制台主機的第三方替代方案,以提供額外的開發人員生產力,以豐富的自定義和索引卷標式介面為中心。 這些應用程式仍然需要執行並隱藏主機視窗。 它們會附加為次要「用戶端」應用程式,以在輪詢迴圈中擷取緩衝區資訊,作為主要命令行用戶端應用程式運作。 他們的目標是成為終端機,就像在其他平臺上一樣,但在 Windows 世界中,終端機無法取代。

在此期間,引進 了 pseudoconsole 基礎結構。 Pseudoconsole 允許任何應用程式以非互動式模式啟動控制台主機,並成為使用者的最終終端介面。 這項工作的主要限制是 Windows 在維護所有已發行 Windows 主控台 API 的無限期未來時的持續相容性承諾,同時提供符合所有其他平臺上預期專案的替代伺服器裝載介面: 虛擬終端機序列。 因此,這項工作會執行用戶端階段的鏡像影像: 虛擬console 項目會顯示為委派主機的 虛擬終端機序列 ,並將回復解譯為 Windows 格式輸入序列,以供用戶端應用程式取用。

未來藍圖

終端機應用程式

[2019-Now] 這是控制檯子系統的開放原始碼時代,著重於新的 Windows 終端機。 在 2019 年 5 月的 Microsoft 組建會議上宣佈,Windows 終端機完全位於 Microsoft/終端機的 GitHub 上。 在 虛擬console 的精簡平臺之上建置 Windows 終端機應用程式將是這個時代的焦點,為 Windows 平臺上的開發人員帶來一流的終端機體驗。

Windows 終端機 不僅打算展示平臺,包括 WinUI 介面技術、 MSIX 封裝模型,以及 C++/WinRT 元件架構,也會作為平臺本身的驗證。 Windows 終端機會推動 Windows 組織視需要開啟及發展應用程式平臺,以繼續提升開發人員的生產力。 Windows 終端機獨特的一組強大用戶和開發人員需求,可推動這些市場真正需要 Windows 的新式 Windows 平臺需求。

在 Windows作系統內,這包括從其預設位置 淘汰傳統控制台主機用戶介面 ,以利於 Windows 終端機ConPTY虛擬終端機序列

最後,這個時代打算提供默認體驗的完整選擇,無論是 Windows 終端機產品或任何替代終端機。

用戶端支持連結庫

[未來] 透過用戶端 上的虛擬終端機序列 支援和文件,我們強烈建議 Windows 命令行公用程式開發人員先透過傳統 Windows API 使用虛擬終端機序列,以取得與所有平臺整合生態系統的優點。 不過,其中一個顯著的遺漏部分是,其他平臺具有廣泛的客戶端協助程序連結庫,可用來處理讀取 和圖形顯示等輸入,例如 ncurses。 這個特定的未來藍圖元素代表探索生態系統所提供的功能,以及如何透過傳統控制台 API 在 Windows 命令行應用程式中加速採用虛擬終端機序列。

時序傳遞

[未來] 虛擬終端機客戶端和伺服器實作的組合可讓您完整混合和比對用戶端命令行和終端機裝載應用程式。 這種組合可以與傳統 Windows 控制台 API虛擬終端機序列交談,不過,將這一點轉譯成傳統相容的 Windows 方法,然後回到更通用的虛擬終端機方法時,會產生額外成本。

一旦市場在 Windows 上充分採用 虛擬終端機序列 和 UTF-8,控制台主機的轉換/解譯作業就可以選擇性地停用。 主機接著會變成簡單的 API 呼叫服務,並透過 pseudoconsole 從裝置呼叫轉接至主控應用程式。 這項變更會增加效能,並將用戶端應用程式與終端機之間可說出的序列方言最大化。 透過這項變更,將會啟用額外的互動案例, 並(最後) 讓 Windows 世界與命令行應用程式空間中所有其他平臺的系列保持一致。