Partilhar via


Aplicativos MSIX AppContainer

Importante

Para qualquer processo em execução no AppContainer, se você fizer com que DeploymentManager.Initialize seja chamado, seu aplicativo precisará declarar o packageManagement no manifesto do pacote. Para mais detalhes, consulte o auto-inicializador do Gestor de Implantação.

O tópico AppContainer para aplicativos herdados cobre todas as informações básicas necessárias sobre o que é o ambiente AppContainer e seus benefícios; esse tópico também contém exemplos de código C# e C++ para testar se um processo está ou não sendo executado dentro de um AppContainer.

O tópico que você está lendo agora mostra como você pode pegar um aplicativo empacotado usando MSIX e configurá-lo facilmente para ser executado no ambiente AppContainer (em um contêiner de aplicativo leve). As aplicações da Plataforma Universal do Windows (UWP) são automaticamente aplicações AppContainer. Mas você também pode configurar seu aplicativo de área de trabalho empacotado com MSIX para ser um aplicativo AppContainer.

O processo de uma aplicação AppContainer e os seus processos filho são executados dentro de um contentor de aplicação leve, onde podem aceder apenas aos recursos que lhes são especificamente concedidos. E são isolados através da virtualização do sistema de arquivos e do registro. Como resultado, os aplicativos implementados em um AppContainer não podem ser hackeados para permitir ações maliciosas fora dos recursos atribuídos limitados.

Sugestão

Os aplicativos não empacotados também podem ser executados em um AppContainer. Mas é particularmente fácil usar o AppContainer se você empacotar usando MSIX. Portanto, todos os cenários descritos neste tópico são sobre aplicativos empacotados.

Configurar um projeto WinUI 3 para AppContainer

As etapas em Criar um novo projeto para um aplicativo de desktop C# ou C++ WinUI 3 empacotado mostram a maneira padrão e recomendada de criar um novo projeto WinUI 3.

Por padrão, o arquivo do Package.appxmanifest projeto contém configuração para um pacote de confiança total (ou seja, nível de integridade médio). As secções relevantes têm o seguinte aspeto:

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

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

Para configurar o pacote como contendo um aplicativo AppContainer, você pode editar o atributo EntryPoint e remover a declaração de capacidade restrita (mas manter o elemento Capabilities ). Assim:

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

<Capabilities/>
...

Se o seu pacote se instalar no Windows 10, versão 2004 (10.0; Build 19041) e/ou posterior, depois, em vez de definir EntryPoint, pode definir uap10:TrustLevel e uap10:RuntimeBehavior (após declarar o prefixo de namespace XML, como mostrado). Assim:

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

Para obter mais informações, consulte estes tópicos:

Configurar uma solução de dois projetos WinUI 3 para AppContainer

A seção anterior descreveu o processo para MSIX de projeto único, que recomendamos e este é o padrão para novos projetos WinUI 3. Para obter mais informações, consulte Empacotar seu aplicativo usando MSIX de projeto único.

Mas poderás ter um projeto WinUI 3 que remonta a datas anteriores à introdução do recurso MSIX de projeto único. Nesse caso, terá dois projetos na sua solução — o seu projeto de aplicação, mais um projeto adicional de Empacotamento de Aplicações do Windows. Se você pode migrar seu projeto para MSIX de projeto único, então isso é ideal. E você poderá seguir as orientações da seção anterior. Para obter mais informações, consulte Empacotar seu aplicativo usando MSIX de projeto único.

Se você não puder migrar seu projeto para MSIX de projeto único, esta seção descreve como configurar seu pacote como contendo um aplicativo AppContainer.

Um Windows Application Packaging Project implica uma configuração padrão que sobrepõe a configuração em Package.appxmanifest. O projeto se comporta como se houvesse uma propriedade TrustLevel no arquivo de projeto definida como um valor de Full.

Para corrigir esse valor de propriedade implícito, expanda o nó Dependencies>Applications do projeto de empacotamento e selecione o nó que representa a referência ao seu projeto WinUI 3. Depois, na janela Propriedades do Visual Studio (não propriedades do projeto), para a propriedade Nível de Confiança escolhe o valor de Confiança Parcial.

O arquivo de projeto para o projeto de empacotamento agora contém esta propriedade explícita:

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

Agora, podes remover <rescap:Capability Name="runFullTrust" /> do ficheiro do projeto de empacotamento Package.appxmanifest.

Configurar um projeto de aplicação Windows (aplicação do tipo WndProc Win32 em C++) para um AppContainer

Esta secção é para si se tiver um projeto do tipo WndProc em C++ Win32 criado com o modelo Windows Application Project. O primeiro passo, resumidamente, é adicionar à sua solução um Windows Application Packaging Project C++. Há mais detalhes sobre os passos exatos em Configure a sua aplicação de ambiente de trabalho para a embalagem MSIX em Visual Studio. Esse tópico se aplica a aplicativos de área de trabalho escritos em C++ ou C#.

Em seguida, abra o arquivo de projeto do novo projeto de empacotamento e adicione uma propriedade TrustLevel à propriedade ProjectReference existente da seguinte forma:

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

Quando você compila, você pode ver o erro "erro APPX1673: manifesto do aplicativo está faltando elemento obrigatório 'PhoneIdentity'". Se isso acontecer, edite o arquivo do Package.appxmanifest projeto da seguinte forma:

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

Configure um projeto WPF ou WinForms para AppContainer

Esta secção destina-se a si se tiver uma das seguintes opções:

  • um projeto de aplicação Windows Presentation Foundation (WPF) criado com o modelo de projeto C# WPF Application. Isso vai dar-te um projeto .NET; e é diferente do modelo de projeto chamado WPF App (.NET Framework). Ou
  • um projeto de aplicação Windows Forms (WinForms) criado com o modelo de projeto C# Windows Forms App. Isso vai dar-te um projeto .NET; e é diferente do modelo de projeto chamado Windows Forms App (.NET Framework).

O primeiro passo, resumidamente, é adicionar à sua solução um Empacotamento de Aplicações em C# Windows Project. Há mais detalhes sobre os passos exatos em Configure a sua aplicação de ambiente de trabalho para a embalagem MSIX em Visual Studio.

Depois, expanda o nó Dependencies>Applications no projeto de empacotamento e selecione o nó que representa a referência ao seu projeto WPF ou WinForms. Depois, na janela Propriedades do Visual Studio (não propriedades do projeto), para a propriedade Nível de Confiança escolhe o valor de Confiança Parcial.