透過服務、延伸模組和套件擴充您的應用程式

Windows 提供多種技術,讓你的應用程式能為其他應用程式提供功能,或使用第三方外掛。本文比較了 Windows 應用程式 SDK 桌面應用程式可用的擴充性選項。

擴充性選項概述

科技 Description 需要封裝識別碼 最低作業系統
應用程式服務 應用程式間透過 AppServiceConnection 進行的請求/回應通訊 Yes Windows 10 1607
應用程式擴充功能 外掛模式 — 主機應用程式從擴充套件中發現內容 Yes Windows 10 1607
套件擴充功能 更廣泛的套件層級擴充能力 uap17:PackageExtension Yes Windows 11
選用套件 補充主應用程式的額外內容包 Yes Windows 10 1709
資源套件 語言、規模與無障礙資產依市場區分 Yes Windows 10

選擇合適的技術

何時使用應用程式服務

  • 你需要不同應用程式之間的雙向通訊。
  • 消費者應用程式會發送請求並等待回應。
  • 你想讓類似 API 的介面暴露給其他應用程式。

舉例:一個翻譯服務,其他應用程式可以呼叫它來翻譯文字。

在下列情況下使用 App 擴充功能

  • 你的應用程式需要一個外掛模式,讓第三方提供內容、主題或附加元件。
  • 擴充功能是在執行時從已安裝的套件中發現的。
  • 擴充功能提供資料或設定,而非可執行程式碼(程式碼執行應該使用應用服務)。

範例:一個影像編輯器,能從已安裝的擴充套件中發現過濾包。

在下列情況下使用套件延伸模組

  • 你需要在 Windows 11 上具備更廣泛的套件層級擴充性。
  • 擴充套件需要存取比 PublicFolder 模型允許更多的套件內容。

在…時使用選用套件

  • 你會有額外內容(DLC、高級功能)以獨立套裝形式分發。
  • 內容由同一家出版社撰寫。

架構模式

支援擴充功能探索的應用程式服務

將應用程式擴充功能與應用程式服務結合,打造完整的外掛架構:

  1. 你的主機應用程式會用 AppExtensionCatalog 來發現已安裝的擴充功能。
  2. 每個擴充化都會宣告描述其能力的屬性。
  3. 當使用者啟用擴充功能時,主機應用程式會連接該擴充功能的應用服務進行雙向通訊。
┌─────────────────┐      ┌──────────────────┐
│   Host app       │      │  Extension app    │
│                  │      │                   │
│ AppExtension     │◄────►│ AppExtension      │
│   Catalog        │      │   declaration     │
│                  │      │                   │
│ AppService       │◄────►│ AppService        │
│   Connection     │      │   provider        │
└─────────────────┘      └──────────────────┘

僅限內容延伸

對於擴充功能提供靜態內容(主題、範本、資料檔案)的簡單情境:

  1. 主機應用程式透過 AppExtensionCatalog 探索擴充功能。
  2. 它會從擴充功能的 PublicFolder 讀取檔案。
  3. 不需要任何應用程式服務。

與 UWP 擴充性的差異

此處描述的擴充性技術在 Windows 應用程式 SDK 桌面應用程式中與 UWP 中運作方式相同,但有一個要求:MSIX 套件識別碼。 所有擴充功能都依賴套件清單來進行宣告,並依賴套件目錄作為發現。

如果你的桌面應用程式是未封裝的,就無法使用這些擴充性技術。 考慮其他方法,例如:

  • 基於 COM 的外掛介面
  • 以檔案系統為基礎的擴充功能探索
  • 命名管道或其他IPC機制