Приложения 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/>
...
Дополнительные сведения см. в следующих разделах:
- Элемент Application
- uap10 появился в Windows 10 версии 2004 (10.0; Сборка 19041)
- Типы классического приложения
Настройка решения 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 (а не свойства проекта) для свойства Уровня доверия выберите значение частичного доверия.
См. также
- AppContainer для устаревших приложений
- Создание нового проекта для упаковаемого классического приложения C# или C++ WinUI 3
- Элемент Application
- uap10 появился в Windows 10 версии 2004 (10.0; Сборка 19041)
- Типы классического приложения
- Упаковка приложения с помощью единого проекта MSIX
- Windows Presentation Foundation (WPF)
- Windows Forms (WinForms)
- Настройка классического приложения для упаковки MSIX в Visual Studio