MSIX 架構套件和動態相依性

本文介紹與 MSIX 架構套件相關的重要概念。 本文中的資訊提供實用的內容,可協助您進一步了解 Windows 應用程式 SDK 和 Windows 11 OS 中動態相依性功能的設計和用途。 這項功能可讓您的應用程式在執行階段參考及使用 MSIX 架構套件。

架構套件和套件圖形

MSIX 是一種套件格式,可提供現代化封裝和部署體驗。 也提供全新且受信任的方式,透過 MSIX 架構套件封裝可轉散發程式庫、內容和元件。 MSIX 架構套件可讓已封裝的應用程式透過使用者裝置上的單一共用來源存取元件,而不是將其繫結到應用程式套件中。 常見的架構套件包括 Windows 應用程式 SDK (包括 WinUI3)、WinUI2VCLibs 和 DirectX Runtime。

從 Windows 8 開始並繼續到 Windows 10 和 Windows 11,每個程序都有一個套件圖形,提供應用程式可用的所有套件清單,包括架構、資源、選擇性和主要套件。 此圖形可讓應用程式載入參考套件所提供的 DLL、內容和執行階段類別宣告。 在過去,此圖形在建立程序時已固定,而且在執行階段無法改變:

  • 針對已封裝的應用程式,圖形是根據應用程式封裝資訊清單中 PackageDependency 元素中所宣告的套件相依性來初始化。 建置已封裝的應用程式時,通常會在建置程序期間根據專案參考和相依性為您完成此作業。
  • 針對未封裝的應用程式,套件圖形是空的,而且無法變更。 因此,未封裝的應用程式僅限於標準 DLL 搜尋順序,且無法存取架構套件。

隨著在 Windows 應用程式 SDK 和 Windows 11 中引進動態相依性支援,此靜態套件圖形限制隨即解除。 開發人員可以使用動態相依性,在執行階段從其應用程式參考和使用 MSIX 架構套件。 動態相依性會從應用程式移除靜態套件圖形限制,而開發人員可以決定其運用架構套件的方式。

動態相依性的主要案例

雖然動態相依性可讓任何應用程式在執行階段新增套件架構相依性,但是此功能主要是供在外部位置進行封裝的應用程式或未封裝的應用程式使用。 已封裝的應用程式仍可透過封裝資訊清單中的 PackageDependency 元素,繼續新增靜態相依性。

適用於架構套件的服務模型

動態相依性功能會保留所參考及在執行階段動態使用之架構套件的服務管線完整性。

MSIX 架構套件支援並存模型中的服務,這表示每個版本都安裝在其自己的個別已設定版本資料夾中。 這可讓使用中的應用程式即使在較新的應用程式安裝較新版本的架構套件時,也能保持運作。 根據套件的安裝時間參考執行階段參考,作業系統具有何時刪除舊版指定架構套件的解除安裝邏輯。

  • 安裝應用程式時,可以建立對架構套件的安裝時間參考。 此參考會通知作業系統,應用程式相依於指定的架構套件,如此一來,作業系統就不會在安裝應用程式時解除安裝架構套件。
  • 當應用程式需要使用架構套件中的 API 或內容時,可以將執行階段參考新增至架構套件。 此參考會通知作業系統,架構套件正在使用中,以並存方式處理任何版本更新。 如果已安裝新版本的架構套件,但是執行中應用程式的使用中版本較舊,則除非移除舊版的所有執行階段參考,否則作業系統無法移除較舊的版本。

例如,假設此案例:

  • 應用程式 A 正在執行並使用指定架構套件 1.0.0.0 版。
  • 應用程式 B 已安裝,且相依於相同架構套件 1.0.0.1 版。

在此案例中,兩個版本的架構套件都會安裝並且由應用程式 A應用程式 B 使用。不過,當使用者關閉然後再重新啟動應用程式 A 時,其會挑選較新的 1.0.0.1 版架構套件。 此時,執行階段參考需求對架構套件 1.0.0.0 版不再有效,而且作業系統可以安全地移除 1.0.0.0 版。 稍後,當使用者解除安裝應用程式 A應用程式 B 時,安裝時間參考需求就不再有效,而且作業系統完全移除架構套件是安全的。

對於使用 PackageDependency 元素來指定架構套件靜態參考的已封裝應用程式,當安裝或解除安裝應用程式時,作業系統會追蹤架構套件的安裝時間參考。 針對透過使用動態相依性功能來管理的執行階段參考,作業系統知道已封裝的應用程式何時正在執行,而且會避免在有較新的架構套件可用時移除其使用中的架構套件。