這兩個實作
動態 相依性 API 有兩個實作可供您選擇,視您的目標平臺和案例而定:
-
Windows App SDK 的動態相依性 API。 Windows App SDK 提供 C 和C++函式(
在 msixdynamicdependency.h 中),以及實作動態相依性 API 命名空間中的 Windows 運行時間 (WinRT) 類型。 您可以在任何支援 Windows App SDK 的 Windows 版本上使用此 API 實作。Microsoft.Windows.ApplicationModel.DynamicDependency - 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 可確保至少有一個套件會持續安裝,直到刪除安裝時間參考為止。
- Windows 11 (C/C++):TryCreatePackageDependency
- Windows App SDK (C/C++):MddTryCreatePackageDependency
- Windows App SDK (WinRT):PackageDependency.Create
您指定的準則包括套件系列名稱、最低版本和架構;但您無法指出特定的 MSIX 套件。 當您將運行時間參考新增至 MSIX 套件時,API 會選擇符合指定準則的最高版本。
您也必須指定 生命週期物件,這可以是當前進程、一個檔案或一個 Windows 註冊表鍵,以告知系統該應用程式仍然可用。 如果指定的工件已不存在,則作業系統可以假設不再需要相依性,並且如果沒有其他應用程式宣告相依性,則可以解除安裝 MSIX 套件。 此功能適用於應用程式在卸載時忽略移除安裝時間釘選的案例。
此 API 會傳回相依性識別碼,該標識碼必須用於其他呼叫以建立運行時間參考,以及刪除安裝時間參考。
2.新增執行時參考
當您的應用程式需要使用 MSIX 套件時,請呼叫下列其中一個函式或方法來要求存取指定的 MSIX 套件,並為其新增運行時間參考。 呼叫此 API 會通知作業系統該 MSIX 套件正在使用中,並以並行方式處理任何版本更新(有效地延遲卸載或在應用程式完成使用之前維護舊版)。 如果成功,應用程式可能會啟動類別,並使用 MSIX 套件中的內容。
- Windows 11(C/C++):AddPackageDependency
- Windows App SDK (C/C++):MddAddPackageDependency
- Windows App SDK(WinRT):PackageDependency.Add
當您呼叫此 API 時,您必須傳入在建立安裝時間參考時傳回的相依性識別碼,以及程式套件圖形中 MSIX 套件要使用的所需排名。 此 API 會傳回所參考之 MSIX 套件的完整名稱,以及用來追蹤使用中相依性之句柄。 如果已安裝多個 MSIX 套件符合您在建立安裝時間參考時指定的準則,則 API 會選擇符合準則的最高版本。
3. 移除執行時參考
當您的應用程式使用 MSIX 套件完成時,請呼叫下列其中一個函式或方法來移除運行時間參考。 一般而言,您的應用程式會在關機期間呼叫此 API。 此 API 會通知 OS 可以安全地移除所有不必要的 MSIX 套件版本。
- Windows 11 (C/C++):RemovePackageDependency
- Windows App SDK (C/C++):MddRemovePackageDependency
- Windows App SDK (WinRT):PackageDependencyContext.Remove
當您呼叫此 API 時,您必須傳入添加運行時參考時所返回的控制代碼。
4. 刪除安裝時參考
卸載您的應用程式時,請呼叫下列其中一個函式或方法來刪除安裝時間參考。 如果其他應用程式沒有相依性,此 API 會通知 OS 移除 MSIX 套件是安全的。
- Windows 11 (C/C++):DeletePackageDependency
- Windows App SDK (C/C++):MddDeletePackageDependency
- Windows App SDK(WinRT):PackageDependency.Delete
當您呼叫此 API 時,您必須傳入建立安裝時間參考時所傳回的相依性識別碼。
兩個實作之間的差異
一個生命週期管理員的需求(Windows App SDK 限制)
當您使用 Windows App SDK 的動態相依 API 來對 MSIX 套件建立相依時,API 需要透過另一個已安裝的套件及正在執行的程序來協助 Windows,通知 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 沒有這項限制。
相關主題
- MSIX 架構套件和動態相依性
- 動態相依性規格
- 適用於 Windows App SDK 的
執行時間架構 - 使用 Windows App SDK 執行階段來運行封裝於外部位置或未封裝的應用程式