共用方式為


使用動態相依性 API 在執行階段參考 MSIX 套件

兩個實作

動態相依性 API 有兩個實作可供您選擇,視您的目標平台和案例而定:

  • Windows App SDK 的動態相依性 API。 Windows App SDK 提供 C 和 C++ 函式 (在 msixdynamicdependency.h 中),以及實作動態相依性 API 的 Windows 執行階段 (WinRT) 類型 (在 Microsoft.Windows.ApplicationModel.DynamicDependency 命名空間中)。 您可以在任何支援 Windows App SDK 的 Windows 版本上使用此 API 實作。
  • Windows 11 的動態相依性 API。 Windows 11 也提供 C 和 C++ 函式來實作動態相依性 API (在 appmodel.h 中)。 此 API 實作只能由以 Windows 11 版本 22H2 (10.0 組建 22621) 和更新版本為目標的應用程式使用。

另請參閱兩個實作之間的差異

注意

如您在本主題中所見,Windows App SDK (C/C++) API 的名稱與具有其他 Mdd 前置詞的 Windows 11 (C/C++) API 相同。 Mdd 代表意義為 Microsoft 動態相依性

而且有不同類型的 MSIX 套件,包括架構資源選用主要套件。 動態相依性 API 可讓未封裝的應用程式參考及使用架構套件 (例如 WinUI 2 和 DirectX Runtime)。 如需架構套件相依性的詳細資訊,請參閱 MSIX 架構套件和動態相依性

具體而言,動態相依性 API 提供管理 MSIX 套件安裝時間參考執行階段參考的方法。 如需詳細資訊,請參閱適用於架構套件的服務模型

使用動態相依性 API

若要在未封裝的應用程式中使用動態相依性 API 來相依於 MSIX 套件,請在程式碼中遵循下列一般模式:

1.建立安裝時間參考

在應用程式的安裝程式中,或在應用程式第一次執行期間,呼叫下列其中一個函式或方法,為您想要使用的 MSIX 套件指定一組準則。 這會通知作業系統 (OS) 您的應用程式相依於符合指定準則的 MSIX 套件。 如果已安裝的一或多個 MSIX 套件符合準則,則 Windows 可確保至少有一個 MSIX 套件會持續安裝,直到刪除安裝時間參考為止。

您指定的準則包括套件系列名稱、最低版本和架構; 但您無法指出特定的 MSIX 套件。 當您將執行階段參考新增至 MSIX 套件時,API 會選擇符合指定準則的最高版本。

您也必須指定存留期成品,它可以是目前處理序、檔案或 Windows 登錄機碼,以向系統指出應用程式仍然可用。 如果指定的成品已不存在,則 OS 可以假設不再需要相依性,而且如果沒有其他應用程式宣告相依性,則可以解除安裝 MSIX 套件。 該功能適用於應用程式在解除安裝時忽略移除安裝時間釘選的案例。

此 API 會傳回相依性識別碼,該識別碼必須用於其他呼叫以建立執行階段參考,以及刪除安裝時間參考。

2.新增執行階段參考

當您的應用程式需要使用 MSIX 套件時,請呼叫下列其中一個函式或方法來要求存取指定的 MSIX 套件,並為其新增執行階段參考。 呼叫此 API 會通知 OS MSIX 套件正在使用中,並存處理任何版本更新 (有效地延遲解除安裝或維護舊版,直到應用程式完成使用為止)。 如果成功,應用程式可能會啟動類別,並使用 MSIX 套件中的內容。

當您呼叫此 API 時,您必須傳入在建立安裝時間參考時傳回的相依性識別碼,以及處理序套件圖形中 MSIX 套件要使用的所需排名。 此 API 會傳回所參考之 MSIX 套件的完整名稱,以及用來追蹤使用中相依性之控制碼。 如果已安裝多個 MSIX 套件符合您在建立安裝時間參考時指定的準則,則 API 會選擇符合準則的最高版本。

3.移除執行階段參考

當您的應用程式使用 MSIX 套件完成時,請呼叫下列其中一個函式或方法來移除執行階段參考。 一般而言,您的應用程式會在關閉期間呼叫此 API。 此 API 會通知 OS 可安全移除任何不必要的 MSIX 套件版本。

當您呼叫此 API 時,您必須傳入新增執行階段參考時所傳回的控制碼。

4.刪除安裝時間參考

解除安裝您的應用程式時,請呼叫下列其中一個函式或方法來刪除安裝時間參考。 如果其他應用程式沒有相依性,此 API 會通知 OS 可安全移除 MSIX 套件。

當您呼叫此 API 時,您必須傳入建立安裝時間參考時所傳回的相依性識別碼。

兩個實作之間的差異

存留期管理員的需求 (Windows App SDK 限制)

當您使用 Windows App SDK 的動態相依性 API 來相依於 MSIX 套件時,API 需要透過另一個已安裝的套件和執行處理序來協助,告知 Windows MSIX 套件正在使用中,以及在使用架構時封鎖服務。 該元件稱為存留期管理員

針對其架構套件,Windows App SDK 提供稱為動態相依性存留期管理員 (DDLM) 的存留期管理員元件。 不過,目前沒有其他架構套件提供來自 Microsoft 的類似存留期管理員元件。

Windows 11 的動態相依性 API 沒有這項限制。

參考和使用主要套件 (Windows App SDK 限制)

動態相依性永遠可以以架構套件為目標。 但只有 Windows 11 的動態相依性 API 可以參考和使用主要套件。

主要套件必須已正確設定其應用程式封裝資訊清單來源檔案 (Visual Studio 中的 Package.appxmanifest 檔案)。 具體而言,主要套件 (目標,而非呼叫端) 需要設定 <uap15:DependencyTarget>true</> (請參閱 uap15:DependencyTarget)。 因此,<uap15::DependencyTarget> 的目的是要讓動態相依性以主要套件為目標。 換句話說,主要套件必須加入宣告,以允許自己作為動態相依性使用 (而架構套件一律會隱含允許這樣做)。

參考 Windows App SDK 架構套件 (Windows App SDK 限制)

在未封裝的應用程式中,您無法使用 Windows App SDK 的動態相依性 API 來參考 Windows App SDK 架構套件 (就像您可以參考其他 MSIX 套件一樣)。 相反地,您必須使用 Windows App SDK 所提供的啟動載入器 API。 啟動載入器 API 是動態相依性 API 的特殊形式,其設計目的是在 Windows App SDK 架構套件上採用相依性。 如需詳細資訊,請參閱針對在外部位置進行封裝或未封裝的應用程式,使用 Windows App SDK 執行階段

Windows 11 的動態相依性 API 沒有這項限制。