Udostępnij przez


Aplikacje MSIX AppContainer

Temat AppContainer dla starszych aplikacji obejmuje wszystkie niezbędne informacje w tle dotyczące środowiska AppContainer i jego korzyści; ten temat zawiera również przykłady kodu C# i C++ na potrzeby testowania, czy proces jest uruchomiony wewnątrz aplikacji AppContainer.

W temacie, który czytasz teraz, pokazano, jak można użyć aplikacji spakowanej przy użyciu pliku MSIX i łatwo skonfigurować ją do uruchamiania w środowisku AppContainer (w uproszczonym kontenerze aplikacji). Aplikacje platformy uniwersalnej systemu Windows (UWP) są automatycznie aplikacjami AppContainer. Możesz jednak również skonfigurować aplikację komputerową opakowaną w MSIX jako aplikację AppContainer.

Proces aplikacji AppContainer i jej procesy podrzędne są uruchamiane wewnątrz uproszczonego kontenera aplikacji, w którym mogą uzyskiwać dostęp tylko do zasobów, które zostały im przyznane. Są one izolowane przy użyciu systemu plików i wirtualizacji rejestru. W związku z tym aplikacje zaimplementowane w aplikacji AppContainer nie mogą zostać zhakowane, aby umożliwić złośliwe działania poza ograniczonymi przypisanymi zasobami.

Wskazówka

Aplikacje rozpakowane mogą być również uruchamiane w aplikacji AppContainer. Jednak szczególnie łatwo jest używać aplikacji AppContainer, jeśli pakiet jest używany przy użyciu pliku MSIX. Wszystkie scenariusze opisane w tym temacie dotyczą spakowanych aplikacji.

Konfigurowanie projektu WinUI 3 dla aplikacji AppContainer

Kroki opisane w artykule Create a new project for a packaged C# or C++ WinUI 3 desktop app (Tworzenie nowego projektu dla spakowanego języka C# lub C++ WinUI 3 ) pokazują domyślny i zalecany sposób tworzenia nowego projektu WinUI 3.

Domyślnie plik projektu Package.appxmanifest zawiera konfigurację pełnego zaufania (czyli pakietu o średnim poziomie integralności). Odpowiednie sekcje wyglądają następująco:

...
<Applications>
  <Application ...
    EntryPoint="$targetentrypoint$">
    ...
  </Application>
</Applications>

<Capabilities>
  <rescap:Capability Name="runFullTrust" />
</Capabilities>
...

Aby skonfigurować pakiet jako zawierający aplikację AppContainer, możesz edytować atrybut EntryPoint i usunąć deklarację możliwości z ograniczeniami (ale zachować element Capabilities ). Jak to:

...
<Applications>
  <Application ...
    EntryPoint="windows.partialTrustApplication">
    ...
  </Application>
</Applications>

<Capabilities/>
...

Jeśli pakiet jest instalowany w systemie Windows 10, wersja 2004 (10.0; Kompilacja 19041) i/lub nowsza, to zamiast ustawiać EntryPoint, można ustawić uap10:TrustLevel i uap10:RuntimeBehavior (po zadeklarowaniu prefiksu przestrzeni nazw XML, jak pokazano). Jak to:

<Package ...
  xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  ...>
...
  <Applications>
    <Application ...
      EntryPoint="$targetentrypoint$"
      uap10:TrustLevel="appContainer"
      uap10:RuntimeBehavior="packagedClassicApp">
      ...
    </Application>
  </Applications>

  <Capabilities/>
...

Aby uzyskać więcej informacji, zobacz następujące tematy:

Konfigurowanie rozwiązania z dwoma projektami WinUI 3 dla AppContainer

W poprzedniej sekcji opisano proces MSIX dla pojedynczego projektu, który zalecamy i który jest domyślnym ustawieniem dla nowych projektów WinUI 3. Aby uzyskać więcej informacji, zobacz Package your app using single-project MSIX (Pakowanie aplikacji przy użyciu pliku MSIX pojedynczego projektu).

Jednak może istnieć projekt WinUI 3, który pochodzi sprzed wprowadzenia funkcji MSIX dla projektu jednolitego. W tym przypadku będziesz mieć dwa projekty w rozwiązaniu — projekt aplikacji oraz dodatkowy projekt tworzenia pakietów aplikacji systemu Windows. Jeśli możesz przeprowadzić migrację projektu do jednoprojektowego MSIX, jest to idealne rozwiązanie. I będziesz w stanie postępować zgodnie ze wskazówkami w poprzedniej sekcji. Aby uzyskać więcej informacji, zobacz Package your app using single-project MSIX (Pakowanie aplikacji przy użyciu pliku MSIX pojedynczego projektu).

Jeśli nie możesz przeprowadzić migracji projektu do pojedynczego projektu MSIX, ta sekcja opisuje, jak skonfigurować pakiet jako zawierający aplikację AppContainer.

Projekt tworzenia pakietów aplikacji systemu Windows oznacza domyślne ustawienie, które zastępuje konfigurację w programie Package.appxmanifest. Projekt zachowuje się tak, jakby w pliku projektu była właściwość TrustLevel ustawiona na wartość Full.

Aby rozwiązać ten problem z wartością właściwości, rozwiń węzeł Zależności, a następnie > projektu pakietowania i wybierz węzeł reprezentujący odwołanie do projektu WinUI 3. Następnie w oknie Właściwości programu Visual Studio (a nie właściwości projektu) dla właściwości Poziom zaufania wybierz wartość Częściowe zaufanie.

Plik projektu pakietu zawiera teraz tę jawną właściwość:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

I możesz teraz usunąć <rescap:Capability Name="runFullTrust" /> z pliku Package.appxmanifest projektu pakowania.

Konfigurowanie projektu aplikacji systemu Windows (C++ Win32 WndProc-type app) dla aplikacji AppContainer

Ta sekcja jest dla Ciebie, jeśli masz projekt typu C++ Win32 WndProc, który został utworzony za pomocą szablonu projektu Aplikacji Windows. Pierwszym krokiem w skrócie jest dodanie do rozwiązania projektu tworzenia pakietów aplikacji systemu Windows w języku C++. Więcej szczegółowych informacji na temat dokładnych kroków można znaleźć w artykule Konfigurowanie aplikacji klasycznej na potrzeby tworzenia pakietów MSIX w programie Visual Studio. Ten temat dotyczy aplikacji na komputery stacjonarne napisanych w języku C++ lub C#.

Następnie otwórz plik projektu nowego projektu pakowania i dodaj właściwość TrustLevel do istniejącej właściwości ProjectReference w następujący sposób:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

Podczas kompilacji może zostać wyświetlony błąd "błąd APPX1673: brak wymaganego elementu "PhoneIdentity" manifestu aplikacji". W takim przypadku zmodyfikuj Package.appxmanifest plik projektu w następujący sposób:

<Package ...
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  ...>
...
  <mp:PhoneIdentity
      PhoneProductId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx."
      PhonePublisherId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.">
  </mp:PhoneIdentity>
...

Konfigurowanie projektu WPF lub WinForms dla aplikacji AppContainer

Ta sekcja jest dla Ciebie, jeśli masz:

  • projekt aplikacji Windows Presentation Foundation (WPF), który został utworzony przy użyciu szablonu projektu aplikacji WPF języka C#. Umożliwi to utworzenie projektu platformy .NET; i różni się od szablonu projektu o nazwie WPF App (.NET Framework). lub
  • projekt aplikacji Windows Forms (WinForms), który został utworzony za pomocą szablonu projektu Aplikacji windows Forms języka C#. Umożliwi to utworzenie projektu platformy .NET; i różni się od szablonu projektu o nazwie Windows Forms App (.NET Framework).

Pierwszym krokiem w skrócie jest dodanie do rozwiązania projektu tworzenia pakietów aplikacji systemu Windows w języku C#. Więcej szczegółowych informacji na temat dokładnych kroków można znaleźć w artykule Konfigurowanie aplikacji klasycznej na potrzeby tworzenia pakietów MSIX w programie Visual Studio.

Następnie rozwiń węzeł projektu pakowania Zależności>Aplikacji i wybierz węzeł reprezentujący odwołanie do projektu WPF lub WinForms. Następnie w oknie Właściwości programu Visual Studio (a nie właściwości projektu) dla właściwości Poziom zaufania wybierz wartość Częściowe zaufanie.