共用方式為


進程間通訊

Windows 作業系統提供機制來促進應用程式之間的通訊和數據共用。 這些機制所啟用的活動統稱為 進程間通訊 (IPC)。 某些形式的 IPC 有助於在數個專門程式之間分工。 其他形式的 IPC 有助於在網路上的電腦之間分工。

一般而言,應用程式可以使用分類為用戶端或伺服器的 IPC。 用戶端是應用程式或進程,會向其他應用程式或進程要求服務。 伺服器是回應用戶端要求的應用程式或進程。 根據情況,許多應用程式會同時作為客戶端和伺服器。 例如,文字處理應用程式可能會作為用戶端,從做為伺服器的電子錶格應用程式要求製造成本摘要表。 接著,電子表格應用程式可能會作為用戶端,從自動化清查控制應用程式要求最新的清查層級。

決定您的應用程式會受益於 IPC 之後,您必須決定要使用哪一個可用的 IPC 方法。 應用程式可能會使用數個 IPC 機制。 這些問題的解答會決定應用程式是否可以使用一或多個 IPC 機制來受益。

  • 應用程式是否應該能夠與網路上其他計算機上執行的其他應用程式通訊,或者應用程式是否足以與本機電腦上的應用程式通訊?
  • 應用程式是否應該能夠與在其他可能在不同的操作系統下執行的應用程式通訊(例如16位 Windows 或UNIX)?
  • 應用程式的使用者是否必須選擇應用程式通訊的其他應用程式,或者應用程式是否可以隱含地尋找其合作夥伴?
  • 應用程式應該以一般方式與許多不同的應用程式通訊,例如允許與其他應用程式進行剪貼作業,或者其通訊需求是否受限於與特定其他應用程式的一組限制互動?
  • 效能是否為應用程式的重要層面? 所有 IPC 機制都包含一些額外負荷。
  • 應用程式是否為 GUI 應用程式或控制台應用程式? 某些 IPC 機制需要 GUI 應用程式。

Windows 支援下列 IPC 機制:

使用 IPC 的剪貼簿

剪貼簿可作為應用程式之間數據共用的中央存放庫。 當使用者在應用程式中執行剪下或複製作業時,應用程式會以一或多個標準或應用程式定義的格式,將選取的數據放在剪貼簿上。 然後,任何其他應用程式都可以從剪貼簿擷取數據,並從其瞭解的可用格式中選擇。 剪貼簿是一個非常鬆散結合的交換媒體,其中應用程式只需要同意數據格式。 應用程式可以位於相同電腦或網路上的不同電腦上。

重點: 所有應用程式都應該針對他們了解的數據格式支援剪貼簿。 例如,文本編輯器或文字處理器至少應該能夠產生並接受純文本格式的剪貼簿數據。 如需詳細資訊,請參閱 剪貼簿

使用 COM 進行 IPC

使用 OLE 管理 複合檔案的應用程式,也就是由各種不同應用程式的數據所組成的檔。 OLE 提供服務,可讓應用程式輕鬆地在其他應用程式上呼叫以進行數據編輯。 例如,使用 OLE 的字處理器可以從電子表格內嵌圖形。 用戶可以選擇內嵌圖表進行編輯,自動從文字處理器內啟動電子錶格。 OLE 會負責啟動電子錶格,並呈現圖表以供編輯。 當用戶結束電子表格時,圖形會在原始文字處理器檔中更新。 電子錶格似乎是字處理器的延伸模組。

OLE 的基礎是元件物件模型 (COM)。 使用 COM 的軟體元件可以與其他各種元件通訊,即使是尚未撰寫的軟體元件。 元件會以物件和用戶端的形式互動。 分散式 COM 會擴充 COM 程式設計模型,使其可在網路上運作。

重點: OLE 支援複合檔,並讓應用程式包含內嵌或鏈接的數據,在選擇時,會自動啟動另一個應用程式進行數據編輯。 這可讓任何其他使用 OLE 的應用程式擴充應用程式。 COM 物件可透過一或多個相關函式來存取對象的數據,稱為 介面。 如需詳細資訊,請參閱 COM 和 ActiveX 物件服務。

使用 IPC 的數據複製

數據複製可讓應用程式使用 WM_COPYDATA 訊息,將資訊傳送至另一個應用程式。 此方法需要傳送應用程式與接收應用程式之間的合作。 接收應用程式必須知道資訊的格式,而且能夠識別傳送者。 傳送的應用程式無法修改任何指標所參考的記憶體。

關鍵點: 數據複製可用來使用 Windows 傳訊快速將資訊傳送至另一個應用程式。 如需詳細資訊,請參閱 數據複製

使用 DDE 進行 IPC

DDE 是一種通訊協定,可讓應用程式以各種格式交換數據。 應用程式可以使用 DDE 進行一次性數據交換,或進行中的交換,讓應用程式在新的數據可供使用時彼此更新。

DDE 所使用的資料格式與剪貼簿所使用的數據格式相同。 DDE 可視為剪貼簿機制的延伸。 剪貼簿幾乎一律用於使用者命令的一次性回應,例如從功能表選擇 [貼上] 命令。 DDE 通常是由使用者命令起始,但通常會繼續運作,而不需要進一步的用戶互動。 您也可以為應用程式之間具有更緊密結合通訊需求的特殊用途 IPC 定義自定義 DDE 資料格式。

在相同電腦上執行的應用程式或網路上的不同電腦上,可能會發生 DDE 交換。

重點: DDE 不像較新的技術那麼有效率。 不過,如果其他 IPC 機制不適合,或者您必須與僅支援 DDE 的現有應用程式介面,您仍然可以使用 DDE。 如需詳細資訊,請參閱 動態數據交換動態數據交換管理連結庫

使用 IPC 的檔案對應

檔案對應 可讓進程將檔案的內容視為進程位址空間中的記憶體區塊。 此程式可以使用簡單的指標作業來檢查和修改檔案的內容。 當兩個或多個進程存取相同的檔案對應時,每個進程都會在其自己的地址空間中收到記憶體指標,可用來讀取或修改檔案的內容。 進程必須使用同步處理物件,例如號誌,以防止多任務環境中的數據損毀。

您可以使用檔案對應的特殊案例,在進程之間提供 具名共享記憶體 。 如果您在建立檔案對應物件時指定系統交換檔案,則會將檔案對應對象視為共用記憶體區塊。 其他進程可以開啟相同的檔案對應物件來存取相同的記憶體區塊。

檔案對應相當有效率,也提供操作系統支援的安全性屬性,有助於防止未經授權的數據損毀。 檔案對應只能在本機計算機上的進程之間使用;它無法透過網路使用。

重點: 檔案對應是同一部計算機上兩個或多個進程共享數據的有效方式,但您必須在進程之間提供同步處理。 如需詳細資訊,請參閱 檔案對應同步處理

使用Mailslot for IPC

Mailslots 提供單向通訊。 任何建立mailslot的程式都是 mailslot伺服器。 其他進程,稱為 mailslot 用戶端,藉由將郵件寫入其 mailslot,將訊息傳送至 mailslot 伺服器。 內送郵件一律會附加至mailslot。 mailslot 會儲存郵件,直到mailslot伺服器讀取郵件為止。 進程可以是mailslot伺服器和mailslot用戶端,因此可以使用多個mailslotslot進行雙向通訊。

mailslot 用戶端可以將郵件傳送至本機電腦上的mailslot、在另一部電腦上的mailslot,或傳送給指定網路網域中所有電腦上具有相同名稱的所有mailslot。 廣播給網域上所有 mailslot 的郵件不能超過 400 個字節,而傳送至單一 mailslot 的郵件只會受限於郵件集伺服器在建立 mailslot 時所指定的郵件大小上限。

重點: Mailslots 為應用程式提供一種簡單的方式來傳送和接收短訊息。 它們也會提供在網路網域中跨所有電腦廣播訊息的能力。 如需詳細資訊,請參閱 Mailslots

使用 IPC 的管道

雙向通訊有兩種類型的管道:匿名管道和命名管道。 匿名管道 可讓相關進程彼此傳輸資訊。 一般而言,匿名管道用於重新導向子進程的標準輸入或輸出,以便與父進程交換數據。 若要以雙向交換數據(雙工作業),您必須建立兩個匿名管道。 父進程會使用寫入句柄將數據寫入至一個管道,而子進程則會使用其讀取句柄從該管道讀取數據。 同樣地,子進程會將數據寫入另一個管道,父進程會從中讀取數據。 匿名管道無法透過網路使用,也無法在不相關的進程之間使用。

命名管道 可用來在不是相關進程的進程之間,以及不同計算機上的進程之間傳輸數據。 一般而言,命名管道伺服器進程會建立具有已知名稱的命名管道,或要與其客戶端通訊的名稱。 知道管道名稱的命名管道用戶端進程可以開啟其另一端,但受限於命名管道伺服器進程所指定的存取限制。 在伺服器和用戶端都連線到管道之後,他們可以在管道上執行讀取和寫入作業來交換數據。

關鍵點: 匿名管道提供有效率的方式,可將標準輸入或輸出重新導向至同一部計算機上的子進程。 命名管道提供簡單的程式設計介面,可在兩個進程之間傳輸數據,無論是位於同一部計算機還是透過網路傳輸。 如需詳細資訊,請參閱 管道

使用 RPC 進行 IPC

RPC 可讓應用程式遠端呼叫函式。 因此,RPC 可讓 IPC 如同呼叫函式一樣簡單。 RPC 會在單一電腦或網路上的不同電腦上執行進程。

Windows 提供的 RPC 符合 Open Software Foundation (OSF) 分散式運算環境 (DCE) 的規範。 這表示使用 RPC 的應用程式能夠與其他支援 DCE 的作業系統執行的應用程式通訊。 RPC 會自動支援資料轉換以考慮不同的硬體架構,以及不同環境之間的位元組順序。

RPC 用戶端和伺服器緊密結合,但仍維持高效能。 系統會使用 RPC 來協助作業系統不同部分之間的用戶端/伺服器關聯性。

關鍵點: RPC 是函式層級介面,支援自動數據轉換,以及與其他操作系統的通訊。 使用 RPC,您可以建立高效能且緊密結合的分散式應用程式。 如需詳細資訊,請參閱 Microsoft RPC 元件

使用 Windows Sockets for IPC

Windows Sockets 是與通訊協議無關的介面。 它會利用基礎通訊協議的通訊功能。 在 Windows Sockets 2 中,套接字句柄可以選擇性地做為具有標準檔案 I/O 函式的檔案句柄。

Windows Socket 是以 Berkeley Software Distribution (BSD) 首次推廣的套接字為基礎。 使用 Windows 套接字的應用程式可以在其他類型的系統上與其他套接字實作通訊。 不過,並非所有傳輸服務提供者都支援所有可用的選項。

重點: Windows 套接字是一種通訊協議獨立介面,可支援目前和新興的網路功能。 如需詳細資訊,請參閱 Windows Sockets 2

Windows 中的 unix 套接字 (AF_UNIX) 函式

從 Windows 測試人員組建 17063 開始,您可以使用 Windows 上的 unix 套接字 (AF_UNIX) 位址系列,在 Win32 進程之間進行通訊。 Unix 套接字允許同一部計算機上進程之間的進程間通訊(IPC)。 如需詳細資訊,請參閱 Windows 的部落格文章 AF_UNIX

遠端Mailslot通訊協定的淘汰

從 Windows 11 Insider Preview 組建 25314 和 Windows Server Preview 組建 25314 開始,我們預設已開始停用 Remote Mailslot 通訊協定。 這是淘汰和最終從 Windows 移除的前身。 如需詳細資訊,請參閱部落格文章 遠端郵件集結尾作為 Windows 測試人員一部分。