Aplicativos do Windows: pacote, implantação e processo

Este tópico discute suas opções sobre:

  • Qual opção de empacotamento usar para seu aplicativo (empacotado, empacotado com local externo ou desempacotado).
  • Como você implantará/distribuirá seu aplicativo e como ele será instalado.
  • O processo de tempo de execução do aplicativo, incluindo o quão isolado ele será e quais APIs estarão disponíveis para ele.

Você pode tomar essas decisões para aplicativos novos e existentes. No entanto, se você ainda estiver no estágio de planejamento de um novo aplicativo, antes de começar a pensar nas considerações acima, primeiro decida qual estrutura de interface do usuário e plataforma de desenvolvimento você usará para seu aplicativo. E para essa decisão, confira Uma visão geral das opções de desenvolvimento do Windows.

Opções de empacotamento: empacotado, empacotado com localização externa ou desempacotado

A decisão sobre qual opção de empacotamento usar para seu aplicativo é determinada pela primeira vez por um conceito conhecido como identidade do pacote, que descreveremos nesta seção. Se você não precisar disso, a decisão se resume à experiência de instalador desejada para você e para seus usuários. Vamos analisar os detalhes dessas coisas.

Muitos recursos de extensibilidade do Windows (tarefas em segundo plano, notificações, extensões personalizadas de menu de contexto e destinos de compartilhamento) só podem ser usados por um aplicativo se ele tiver identidade de pacote em tempo de execução. Isso ocorre porque o SO (sistema operacional) precisa identificar o chamador da API correspondente. Consulte Recursos que exigem a identidade do pacote.

  • Se você precisar usar qualquer um desses recursos, o aplicativo precisará da identidade do pacote. Portanto, ele precisa ser um aplicativo empacotado (os aplicativos empacotados são o único tipo que tem a identidade do pacote). Um aplicativo é empacotado utilizando a tecnologia MSIX (veja O que é MSIX?).
    • Para um novo aplicativo, o processo de empacotamento é simples (e no final desta seção há informações sobre como fazê-lo).
    • Para alguns aplicativos existentes, você pode seguir o mesmo processo de empacotamento que para um novo aplicativo. Mas como alguns aplicativos existentes ainda não estão prontos para que todo o conteúdo esteja presente dentro de um pacote MSIX, há uma opção para que seu aplicativo seja empacotado com local externo. Isso permite que seu aplicativo tenha o identificador de pacote; sendo assim capaz de usar esses recursos que exigem isso. Para obter mais informações, confira Conceder identidade do pacote empacotando com localização externa.
  • Mesmo que você não precise usar nenhum desses recursos, a criação de um aplicativo empacotado ainda é uma boa ideia. Ele fornece aos usuários a maneira mais fácil de instalar, desinstalar e atualizar seu aplicativo. Para obter mais informações, consulte Implantação/distribuição/instalação neste tópico.
  • Mas criar um aplicativo não empacotado é uma opção.

A vantagem é que os aplicativos empacotados são do único tipo que têm a identidade do pacote (e eles têm a melhor experiência de instalação). Um aplicativo não empacotado não tem identidade de pacote; portanto, ele não pode usar as APIs/recursos mencionados acima.

Para obter mais detalhes sobre empacotados versus desempacotados, consulte a visão geral da implantação; em particular, as Vantagens e desvantagens de empacotar sua seção de aplicativo nesse tópico. Esse tópico também menciona a opção empacotada com localização externa .

Para obter informações sobre como configurar seu aplicativo como empacotado ou desempacotado:

Consulte também a seção Windows Gerenciador de Pacotes e o cliente WinGet neste tópico.

Implantação/distribuição/instalação

  • Um aplicativo é empacotado utilizando a tecnologia MSIX.
    • Um aplicativo empacotado também é instalado usando o MSIX. Mas se você optar por empacotar com local externo, poderá pensar nisso como um modelo "traga seu próprio instalador". Portanto, você precisará realizar algum trabalho de instalação com essa opção. Para obter mais informações, confira Conceder identidade do pacote empacotando com localização externa.
  • Um aplicativo não empacotado não envolve o MSIX.

Então, por que importa se seu aplicativo está ou não empacotado?

  • Bem, o MSIX oferece aos usuários uma maneira fácil de instalar, desinstalar e atualizar seu aplicativo. A desinstalação está limpa: quando o aplicativo é desinstalado, o sistema é restaurado para o mesmo estado em que estava antes da instalação; nenhum artefato é deixado para trás.
  • Esse tipo de aplicativo também dá suporte a atualizações incrementais e automáticas.
  • A Microsoft Store otimiza para aplicativos desse tipo (embora possam ser usados dentro ou fora da Loja).
  • É um caminho fácil para uso por meio do acoplamento de aplicativo MSIX (para máquinas virtuais do Área de Trabalho Virtual do Azure). Para obter mais informações, consulte O que é o MSIX app attach?.
  • Um pacote assinado se beneficia de uma forte proteção contra adulteração. Esse benefício é ainda maior do que para um aplicativo não empacotado instalado em Arquivos de Programas.

Consulte também a seção Windows Gerenciador de Pacotes e o cliente WinGet neste tópico.

AppContainer ou IL Médio

A opção de executar seu aplicativo em um AppContainer, ou não, é uma questão de segurança. O processo de um aplicativo AppContainer, e seus processos filho, são executados dentro de um contêiner de aplicativo leve, onde podem acessar apenas os recursos especificamente autorizados para eles. E eles são isolados por meio 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 mal-intencionadas fora dos recursos atribuídos limitados.

Aplicativos empacotados ou não empacotados podem ser configurados para execução em um AppContainer. Mas o processo é mais simples para aplicativos empacotados. Se um aplicativo não for um aplicativo AppContainer, ele será um aplicativo IL médio .

Para obter mais informações, consulte AppContainer para aplicativos herdados e aplicativos MSIX AppContainer.

Para obter informações sobre como configurar seu aplicativo para executar em um AppContainer ou Medium IL:

  • aplicativos WinUI (SDK do Aplicativo Windows). Consulte o atributo de manifesto do pacote do aplicativo uap10:TrustLevel em Configurar um projeto WinUI para AppContainer.
  • Aplicativos de desktop. Consulte a propriedade do projeto do TrustLevel Visual Studio em aplicativos MSIX AppContainer (na seção apropriada para o seu tipo de aplicativo).
  • aplicativos Plataforma Universal do Windows (UWP). Os aplicativos UWP já estão configurados para serem executados em um AppContainer; e essa configuração não pode ser alterada.

Lembre-se de que os aplicativos não empacotados não têm um manifesto de pacote de aplicativo. Portanto, para aplicativos não empacotados, você declara sua decisão de AppContainer ou Medium-IL no arquivo do seu projeto em vez de em um manifesto de pacote do aplicativo.

Isolamento de aplicações Win32

O isolamento do aplicativo Win32 é um recurso de segurança (disponível em Windows 11, versão 24H2 e posterior) que ajuda a conter danos se um aplicativo estiver comprometido e protege as opções de privacidade do usuário. Ele se baseia em AppContainers e componentes que virtualizam recursos e fornecem acesso agenciado. Para obter mais informações, consulte Visão geral do isolamento de aplicativo Win32 e o repositório do GitHub sobre isolamento de aplicativo Win32.

Funcionalidades do aplicativo

Os recursos de aplicativo (por exemplo, InternetClient, localização, microfone e bluetooth) são relevantes principalmente para aplicativos empacotados que são executados em um AppContainer. Isso inclui todos os aplicativos da Plataforma Universal do Windows (UWP) e alguns aplicativos de desktop.

Mas há alguns cenários em que até mesmo um aplicativo IL médio (ou seja, não um aplicativo AppContainer) deve declarar uma funcionalidade. Um exemplo é a funcionalidade restrita runFullTrust .

Para obter mais detalhes sobre os recursos do aplicativo, a quais tipos de aplicativos eles se aplicam e como configurá-los, consulte as declarações de funcionalidade do aplicativo. Você configura os recursos no manifesto do pacote do aplicativo; e é por isso que eles se aplicam apenas a aplicativos empacotados.

Tipos de aplicativos

Aplicativos de área de trabalho e aplicativos Plataforma Universal do Windows (UWP) são os dois principais tipos de aplicativos, embora haja vários tipos de aplicativos na família de aplicativos da área de trabalho. Escolher uma estrutura de interface do usuário (WinForms, WPF, Win32, Direct 2D/3D ou WinUI 3) é até certo ponto independente das configurações descritas neste tópico.

Mas vamos dar uma olhada em como esses tipos de aplicativo podem diferir uns dos outros em termos de empacotamento, implantação e processo.

Primeiro, todos os aplicativos UWP são empacotados e executados em um AppContainer. Mas para aplicativos de desktop, as coisas são mais flexíveis. Você pode optar por empacotar seu aplicativo da área de trabalho ou não. E, independentemente dessa decisão, você pode optar por configurar seu aplicativo desktop como um AppContainer ou como um aplicativo de IL Média.

Embalados Desempacotado
AppContainer Aplicativos de desktop
Aplicativos UWP
Aplicativos de desktop
IL médio Aplicativos de desktop Aplicativos de desktop

Para aplicativos empacotados, para configurar o tipo de aplicativo desejado, use o atributo uap10:RuntimeBehavior no manifesto do pacote do aplicativo (consulte Application (Windows 10)).

  • Aplicativos de desktop são do Windows .exe, normalmente com uma função de ponto de entrada principal ou WinMain. Para configurar seu aplicativo como um aplicativo da área de trabalho, defina uap10:RuntimeBehavior como "packagedClassicApp" ou "win32App".
    • O valor "packagedClassicApp" indica um aplicativo WinUI (SDK do Aplicativo Windows) ou um aplicativo do Desktop Bridge (Centennial). A diferença é que um aplicativo Centennial é executado em um AppContainer.
    • E "win32App" indica qualquer outro tipo de aplicativo Win32 (incluindo um aplicativo empacotado com localização externa).
  • Por fim, a configuração uap10:RuntimeBehavior para "windowsApp" resulta em um aplicativo UWP.

Para obter todas as opções para os tipos de aplicativos que você pode desenvolver, consulte Windows app desenvolvimento: opções e recursos.

SDK do Aplicativo Windows: dependente de estrutura ou autocontido

Se você estiver desenvolvendo ou mantendo um aplicativo que usa o SDK do Aplicativo Windows, terá uma decisão adicional a ser tomada. Como há as duas maneiras a seguir em que você pode implantar o SDK do Aplicativo Windows do qual seu aplicativo depende:

  • Dependente da estrutura (o padrão). Seu aplicativo precisa do SDK do Aplicativo Windows runtime e/ou pacote framework para estar presente no computador de destino.
  • Autossuficiente. Seu aplicativo carrega consigo as suas dependências do "SDK do Aplicativo Windows".

Para obter mais informações, consulte SDK do Aplicativo Windows visão geral da implantação.

Windows Gerenciador de Pacotes e o cliente WinGet

Um package manager pode ajudar os usuários a instalar/atualizar/configurar seu software automatizando o fluxo de trabalho. Os gerenciadores de pacotes podem ajudar a instalar qualquer software, mas tendem a ser usados principalmente para instalar developer tools. Portanto, se você estiver criando uma ferramenta de desenvolvedor, talvez esteja particularmente interessado nessa opção. Mas é assim que funciona:

  • Você, como desenvolvedor de software, define para o package manager (na forma de instruções declarativas) todas as peças necessárias para uma instalação bem-sucedida do seu produto.
  • E, quando um usuário instala seu software, o package manager segue as instruções declarativas para automatizar o fluxo de trabalho de instalação e configuração.

O resultado é uma redução no tempo gasto para preparar o ambiente de um usuário e uma melhor compatibilidade entre os componentes instalados. E você pode usar o Windows Gerenciador de Pacotes para distribuir seus aplicativos empacotados ou não empacotados em formatos como .msix, .msi e .exe.

Para obter mais informações, consulte Windows Gerenciador de Pacotes.