Приложения MSIX AppContainer

В разделе AppContainer для устаревших приложений рассматриваются все необходимые фоновые сведения о том, что такое среда AppContainer, и ее преимущества; этот раздел также содержит примеры кода C# и C++ для тестирования того, выполняется ли процесс внутри AppContainer.

В приведенном ниже разделе показано, как можно использовать приложение, упаковаемое с помощью MSIX, и легко настроить его для запуска в среде AppContainer (в упрощенном контейнере приложений). приложения универсальная платформа Windows (UWP) автоматически являются приложениями AppContainer. Но вы также можете настроить классическое приложение, упаковаемое с помощью MSIX, для приложения AppContainer.

Процесс приложения AppContainer и его дочерние процессы выполняются в упрощенном контейнере приложений, где они могут получить доступ только к ресурсам, которые специально предоставляются им. И они изолированы с помощью файловой системы и виртуализации реестра. В результате приложения, реализованные в AppContainer, не могут быть взломаны, чтобы разрешить вредоносные действия за пределами ограниченных назначенных ресурсов.

Совет

Распакованные приложения также могут выполняться в AppContainer. Но это особенно легко использовать AppContainer, если вы упаковывать с помощью MSIX. Поэтому все сценарии, описанные в этом разделе, относятся к упакованным приложениям.

Настройка проекта WinUI 3 для AppContainer

Действия, описанные в статье "Создание нового проекта для упаковаемого приложения C# или C++ WinUI 3 " по умолчанию и рекомендуемый способ создания нового проекта WinUI 3.

По умолчанию файл проекта Package.appxmanifest содержит конфигурацию для пакета полного доверия (то есть среднего уровня целостности). Соответствующие разделы выглядят следующим образом:

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

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

Чтобы настроить пакет как содержащий приложение AppContainer, можно изменить атрибут EntryPoint и удалить объявление ограниченной возможности (но сохранить элемент Capabilities ). Пример:

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

<Capabilities/>
...

Если пакет устанавливается в Windows 10, версия 2004 (10.0; Сборка 19041) и(или) более поздней версии, а не настройка EntryPoint, можно задать uap10:TrustLevel и uap10:RuntimeBehavior (после объявления префикса пространства имен XML, как показано ниже). Пример:

<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/>
...

Дополнительные сведения см. в следующих разделах:

Настройка решения WinUI 3 с двумя проектами для AppContainer

В предыдущем разделе описан процесс для msIX с одним проектом; рекомендуемый вариант и используемый по умолчанию для новых проектов WinUI 3. Дополнительные сведения см. в статье "Упаковка приложения с помощью одного проекта MSIX".

Но у вас может быть проект WinUI 3, который датируется до внедрения функции MSIX с одним проектом. В этом случае в решении будут два проекта — проект приложения, а также дополнительный проект упаковки приложений Windows. Если вы можете перенести проект в msIX с одним проектом, то это идеально. И вы сможете следовать инструкциям в предыдущем разделе. Дополнительные сведения см. в статье "Упаковка приложения с помощью одного проекта MSIX".

Если вы не можете перенести проект в msIX с одним проектом, в этом разделе описывается настройка пакета как содержащего приложение AppContainer.

Проект упаковки приложений Windows подразумевает параметр по умолчанию, который переопределяет конфигурацию в Package.appxmanifest. Проект ведет себя так, как если бы в файле проекта было свойство TrustLevel , равное значению Full.

Чтобы устранить это подразумеваемое значение свойства, разверните узел приложения зависимостей>проекта упаковки и выберите узел, представляющий ссылку на проект WinUI 3. Затем в окне свойств Visual Studio (а не свойства проекта) для свойства Уровня доверия выберите значение частичного доверия.

Файл проекта для проекта упаковки теперь содержит это явное свойство:

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

Теперь можно удалить <rescap:Capability Name="runFullTrust" /> из файла проекта Package.appxmanifest упаковки.

Настройка проекта приложения Windows (приложение WndProc типа C++ Win32) для AppContainer

Этот раздел предназначен для вас, если у вас есть проект WndProc типа C++ Win32, созданный с помощью шаблона проекта проекта приложения Windows. Первым шагом является добавление в решение проекта упаковки приложений C++ для Windows. Дополнительные сведения см. в статье "Настройка классического приложения для упаковки MSIX" в Visual Studio. Этот раздел относится к классическим приложениям, написанным на C++ или C#.

Затем откройте файл проекта нового проекта упаковки и добавьте свойство TrustLevel в существующее свойство ProjectReference следующим образом:

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

При сборке может появиться сообщение об ошибке "ошибка APPX1673: манифест приложения отсутствует обязательный элемент "Телефон Identity". Если это произойдет, измените файл проекта Package.appxmanifest следующим образом:

<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>
...

Настройка проекта WPF или WinForms для AppContainer

Этот раздел предназначен для вас, если у вас есть:

  • Проект приложения Windows Presentation Foundation (WPF), созданный с помощью шаблона проекта приложения WPF на C#. Это даст вам проект .NET; и это отличается от шаблона проекта с именем приложения WPF (платформа .NET Framework). Or
  • проект приложения Windows Forms (WinForms), созданный с помощью шаблона проекта приложения Windows Forms на C#. Это даст вам проект .NET; и он отличается от шаблона проекта с именем приложения Windows Forms (платформа .NET Framework).

Первым шагом является добавление в решение проекта упаковки приложений C# Windows. Дополнительные сведения см. в статье "Настройка классического приложения для упаковки MSIX" в Visual Studio.

Затем разверните узел зависимостей>проекта упаковки и выберите узел, представляющий ссылку на проект WPF или WinForms. Затем в окне свойств Visual Studio (а не свойства проекта) для свойства Уровня доверия выберите значение частичного доверия.