Udostępnij przez


Pakiety struktury MSIX i zależności dynamiczne

W tym artykule przedstawiono ważne pojęcia związane z pakietami struktury MSIX. Informacje zawarte w tym artykule zawierają przydatny kontekst, który ułatwia lepsze zrozumienie projektu i celu zależności dynamicznych w zestawie SDK aplikacji systemu Windows i w systemie operacyjnym Windows 11. Ta funkcja umożliwia aplikacjom odwołowanie się do pakietów platform MSIX i korzystanie z nich w czasie wykonywania.

Pakiety frameworku i graf pakietów

MSIX to format pakietu, który zapewnia nowoczesne środowisko tworzenia pakietów i wdrażania. Zapewnia również czysty i zaufany sposób pakowania redystrybucyjnych bibliotek, zawartości i składników za pomocą pakietów platformy MSIX . Pakiet platformy MSIX umożliwia spakowanym aplikacjom dostęp do składników za pośrednictwem pojedynczego udostępnionego źródła na urządzeniu użytkownika, zamiast dołączania ich do pakietu aplikacji. Typowe pakiety struktury obejmują zestaw SDK aplikacji systemu Windows (w tym WinUI3), WinUI2, VCLibs i środowisko uruchomieniowe DirectX.

Począwszy od systemu Windows 8 i przechodząc przez system Windows 10 i Windows 11, każdy proces ma graf pakietu, który udostępnia listę wszystkich pakietów dostępnych dla aplikacji, w tym struktury, zasobów, opcjonalnych i głównych pakietów. Ten graf umożliwia aplikacji ładowanie bibliotek DLL, zawartości i deklaracji klas czasu wykonywania dostarczonych przez przywoływały pakiet. Historycznie ten wykres został naprawiony w czasie tworzenia procesu i nie było możliwości zmiany go w czasie wykonywania:

  • W przypadku spakowanych aplikacji graf został zainicjowany na podstawie zależności pakietów zadeklarowanych w elemencie PackageDependency w manifeście pakietu aplikacji. Podczas tworzenia spakowanej aplikacji, proces ten zwykle odbywa się automatycznie na etapie kompilacji, w oparciu o odniesienia i zależności projektu.
  • W przypadku aplikacji rozpakowanych wykres pakietu był pusty i nie można go zmienić. W związku z tym aplikacje rozpakowane były ograniczone do standardowej kolejności wyszukiwania bibliotek DLL i nie mogły uzyskać dostępu do pakietów platformy.

To ograniczenie wykresu pakietu statycznego zostało zniesione wraz z wprowadzeniem obsługi zależności dynamicznych zarówno w zestawu Windows App SDK, jak i w systemie Windows 11. Deweloperzy mogą używać zależności dynamicznych do odwołowania się do pakietów platformy MSIX i używania ich z aplikacji w czasie wykonywania. Zależności dynamiczne usuwają ograniczenia statycznego wykresu pakietów z aplikacji, a deweloperzy mogą zdecydować, jak chcą korzystać z pakietów frameworku.

Podstawowe scenariusze dotyczące zależności dynamicznych

Chociaż zależności dynamiczne umożliwiają każdej aplikacji dodanie zależności od struktury pakietu w czasie wykonywania, funkcja ta jest przeznaczona przede wszystkim do użycia przez aplikacje spakowane z zewnętrznego źródła lub aplikacje nieopakowane. Spakowane aplikacje nadal mogą dodawać zależności statyczne za pośrednictwem elementu PackageDependency w manifeście pakietu.

Model obsługi pakietów ramowych

Funkcja zależności dynamicznych zachowuje integralność potoku obsługi dla pakietu platformy, który jest przywoływany i używany dynamicznie podczas wykonywania.

Pakiety ramowe MSIX wspierają obsługę w modelu równoległym, co oznacza, że każda wersja jest instalowana we własnym oddzielnym wersjonowanym folderze. Dzięki temu aplikacje mogą być uruchomione nawet wtedy, gdy nowsza aplikacja instaluje nowszą wersję pakietu struktury. System operacyjny ma logikę odinstalowywania, która określa, w której sytuacji usunąć starsze wersje danego pakietu frameworku, na podstawie obecności odwołań podczas instalacji oraz odwołań podczas wykonywania dla pakietu.

  • Po zainstalowaniu aplikacji można utworzyć odwołanie na czas instalacji do pakietu frameworku. To odwołanie informuje system operacyjny, że aplikacja ma zależność od określonego pakietu struktury, aby system operacyjny nie odinstalował pakietu struktury, podczas gdy aplikacja jest zainstalowana.
  • Gdy aplikacja musi używać interfejsów API lub zawartości w pakiecie struktury, może dodać odwołanie do czasu wykonywania do pakietu struktury. Ta dokumentacja informuje system operacyjny, że pakiet platformy jest w aktywnym użyciu i obsługuje wszystkie aktualizacje wersji w sposób równoległy. Jeśli jest zainstalowana nowa wersja pakietu struktury, ale uruchomiona aplikacja ma starszą wersję, system operacyjny nie może usunąć starszej wersji, dopóki wszystkie odwołania do starszej wersji nie zostaną usunięte.

Na przykład biorąc pod uwagę ten scenariusz:

  • aplikacja A jest uruchomiona i używa wersji 1.0.0.0 danego pakietu frameworku.
  • aplikacja B jest zainstalowana i ma zależność od wersji 1.0.0.1 tego samego pakietu framework.

W tym scenariuszu obie wersje pakietu frameworka zostaną zainstalowane i będą używane przez aplikację App A i App B. Jednak jeśli aplikacja App A zostanie zamknięta przez użytkownika, a następnie ponownie uruchomiona, wybierze nowszą wersję 1.0.0.1 pakietu frameworka. W tym momencie wymaganie odniesienia czasu wykonania nie jest już aktualne dla wersji 1.0.0.0 pakietu frameworku, a system operacyjny może bezpiecznie usunąć tę wersję. Później, gdy użytkownik odinstaluje App A i App B, wymaganie dotyczące referencji podczas instalacji przestaje być ważne, a system operacyjny może bezpiecznie całkowicie usunąć pakiet framework.

W przypadku spakowanych aplikacji, które używają elementu PackageDependency do określania statycznych odwołań do pakietów platformowych, odwołania do czasu instalacji pakietów platformowych są śledzone przez system operacyjny po zainstalowaniu lub odinstalowaniu aplikacji. W przypadku odwołań w trakcie działania, które są zarządzane przy użyciu funkcji dynamicznych zależności, system operacyjny wie, kiedy spakowana aplikacja jest uruchomiona i unika usuwania używanych pakietów frameworku, gdy dostępny jest nowszy.