Поделиться через


Приложения 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: в манифесте приложения отсутствует обязательный элемент 'PhoneIdentity'". Если это произойдет, измените файл проекта 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 App (.NET Framework). или
  • проект приложения Windows Forms (WinForms), созданный с помощью шаблона проекта приложения Windows Forms на C#. Это даст вам проект .NET; и он отличается от шаблона проекта с именем Приложения Windows Forms (.NET Framework).

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

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