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