Sdílet prostřednictvím


Balíčky architektury MSIX a dynamické závislosti

Tento článek představuje důležité koncepty související s balíčky architektury MSIX. Informace v tomto článku poskytují užitečný kontext, který vám pomůže lépe porozumět návrhu a účelu funkce dynamických závislostí v sadě Windows App SDK a v operačním systému Windows 11. Tato funkce umožňuje aplikacím odkazovat na balíčky architektury MSIX a používat je za běhu.

Balíčky architektury a graf balíčků

MSIX je formát balíčku, který poskytuje moderní prostředí pro balení a nasazení. Poskytuje také čistý a důvěryhodný způsob balení redistribuovatelných knihoven, obsahu a komponent prostřednictvím balíčků architektury MSIX. Balíček architektury MSIX umožňuje zabaleným aplikacím přístup k komponentám prostřednictvím jednoho sdíleného zdroje na zařízení uživatele, a ne jejich sdružování do balíčku aplikace. Mezi běžné balíčky architektury patří Sada Windows App SDK (včetně WinUI3), WinUI2, VCLibs a DirectX Runtime.

Počínaje Windows 8 a pokračováním ve Windows 10 a Windows 11 má každý proces graf balíčků , který poskytuje seznam všech balíčků dostupných pro aplikaci, včetně architektury, prostředku, volitelného a hlavních balíčků. Tento graf umožňuje aplikaci načíst deklarace knihoven DLL, obsahu a tříd runtime poskytnuté odkazovaným balíčkem. Tento graf byl historicky opraven při vytváření procesu a v době běhu nebylo možné ho změnit:

  • U zabalených aplikací se graf inicializoval na základě závislostí balíčků deklarovaných v elementu PackageDependency v manifestu balíčku aplikace. Při vytváření balíčkované aplikace to bylo obvykle prováděno během procesu sestavení na základě referencí a závislostí projektu.
  • U rozbalených aplikací byl graf balíčku prázdný a nebylo možné ho změnit. Proto byly rozbalené aplikace omezené na standardní pořadí vyhledávání dll a nemohly získat přístup k balíčkům architektury.

Toto omezení statického balíčku grafu je zrušeno zavedením podpory dynamických závislostí v sadě Windows App SDK i ve Windows 11. Vývojáři můžou pomocí dynamických závislostí odkazovat a používat balíčky architektury MSIX ze svých aplikací za běhu. Dynamické závislosti odeberou omezení grafu statického balíčku z aplikací a vývojáři se můžou rozhodnout, jak chtějí využívat balíčky architektury.

Primární scénáře pro dynamické závislosti

I když dynamické závislosti umožňují každé aplikaci přidat závislost na frameworku balíčků za běhu programu, tato funkce je primárně určena k použití aplikacemi, které jsou baleny s externím umístěním, nebo nezabalenými aplikacemi. Zabalené aplikace můžou i nadále přidávat statické závislosti prostřednictvím elementu PackageDependency v manifestu balíčku.

Model údržby pro balíčky frameworku

Funkce dynamických závislostí zachovává integritu kanálu služeb pro rámcový balíček, k němuž se odkazuje a který je dynamicky používán za běhu.

Balíčky MSIX frameworku podporují údržbu v modelu vedle sebe, což znamená, že každá verze je nainstalována ve vlastní samostatné složce s verzováním. To umožňuje aplikacím zůstat v provozu i v případě, že novější aplikace nainstaluje novější verzi balíčku architektury. Operační systém má logiku odinstalace pro určení, kdy odstranit starší verze daného balíčku frameworku, na základě přítomnosti odkazů na instalaci a odkazů za běhu pro balíček.

  • Když je aplikace nainstalovaná, může vytvořit odkaz na čas instalace na balíček frameworku. Tento odkaz informuje operační systém, že aplikace má závislost na zadaném balíčku frameworku, takže operační systém balíček frameworku neodinstaluje, dokud bude aplikace nainstalována.
  • Když aplikace potřebuje používat rozhraní API nebo obsah v rámcovém balíčku, může do něj přidat odkaz za běhu. Tento odkaz informuje operační systém, že balíček frameworku je aktivní a že by měl zpracovávat všechny aktualizace verzí vedle sebe. Pokud je nainstalovaná nová verze balíčku architektury, ale spuštěná aplikace používá starší verzi, operační systém nemůže starší verzi odebrat, dokud nebudou odebrány všechny odkazy na starší verzi za běhu.

Například s ohledem na tento scénář:

  • Aplikace A běží a používá verzi 1.0.0.0 daného balíčku architektury.
  • Aplikace B je nainstalovaná a má závislost na verzi 1.0.0.1 stejného balíčku architektury.

V tomto scénáři se nainstalují obě verze balíčku architektury a budou je používat aplikace A a Aplikace B. Když ale uživatel aplikaci A zavře a pak se restartuje, vyzvedne novější verzi 1.0.0.1 balíčku architektury. V tomto okamžiku už není požadavek na referenci za běhu platný pro verzi 1.0.0.0 balíčku architektury a operační systém může bezpečně odebrat verzi 1.0.0.0. Když uživatel později odinstaluje aplikaci A a aplikaci B , požadavek na referenční informace o době instalace už není platný a je bezpečný, aby operační systém zcela odebral balíček architektury.

U zabalených aplikací, které používají element PackageDependency k určení statických odkazů na balíčky rámce, jsou odkazy na balíčky rámce sledovány operačním systémem při instalaci nebo odinstalaci aplikace. Pro odkazy za běhu, které jsou spravovány pomocí funkce dynamických závislostí, operační systém ví, kdy je spuštěna zabalená aplikace, a vyhne se odebrání balíčků rámce, které jsou používány, pokud je k dispozici novější verze.