Criar um aplicativo de console da Plataforma Universal do Windows

Este tópico descreve como criar um aplicativo de console C++/WinRT ou C++/CX Plataforma Universal do Windows (UWP).

Observação

A extensão Modelos de Projeto do Aplicativo de Console (Universal) não dá suporte ao Visual Studio 2022. O Visual Studio 2017 ou o Visual Studio 2019 são necessários para instalar e usar esses modelos.

A partir do Windows 10, versão 1803, você pode escrever aplicativos de console C++/WinRT ou C++/CX UWP executados em uma janela de console, como uma janela do console do Dos ou do PowerShell. Os aplicativos de console usam a janela do console para entrada e saída e podem usar funções universal do Runtime C , como printf e getchar. Aplicativos de console UWP podem ser publicados na Microsoft Store. Eles têm uma entrada na lista de aplicativos e um bloco principal que pode ser fixado no menu Iniciar. Os aplicativos de console UWP podem ser iniciados no menu Iniciar, embora você normalmente os inicie na linha de comando.

Para ver um em ação, aqui está um vídeo sobre Como criar um aplicativo de console UWP.

Usar um modelo de aplicativo de console UWP

Para criar um aplicativo de console UWP, primeiro instale os Modelos de projeto de aplicativo de console (Universal), disponíveis no Visual Studio Marketplace. Os modelos instalados estão disponíveis em Novo Projeto>Instalado>Outras Linguagens>Visual C++>Windows Universal como Aplicativo de Console C++/WinRT (Windows Universal) e Aplicativo de Console C++/CX (Universal do Windows).

Adicione o código ao main()

Os modelos adicionam Program.cpp, que contém a função main(). Aqui é onde começa a execução em um aplicativo de console UWP. Acesse os argumentos de linha de comando com os parâmetros __argc e __argv. O aplicativo de console UWP sai quando o controle retorna de main().

O exemplo a seguir de Program.cpp é adicionado pelo modelo C++/WinRT do Aplicativo de Console :

#include "pch.h"

using namespace winrt;

// This example code shows how you could implement the required main function
// for a Console UWP Application. You can replace all the code inside main
// with your own custom code.

int __cdecl main()
{
    // You can get parsed command-line arguments from the CRT globals.
    wprintf(L"Parsed command-line arguments:\n");
    for (int i = 0; i < __argc; i++)
    {
        wprintf(L"__argv[%d] = %S\n", i, __argv[i]);
    }

    // Keep the console window alive in case you want to see console output when running from within Visual Studio
    wprintf(L"Press 'Enter' to continue: ");
    getchar();
}

Comportamento do aplicativo de console UWP

Um aplicativo de console UWP pode acessar o sistema de arquivos do diretório de onde ele é executado, e abaixo. Isso é possível porque o modelo adiciona a extensão AppExecutionAlias ao arquivo Package.appxmanifest de seu aplicativo. Essa extensão também permite que o usuário digite o alias em uma janela do console para iniciar o aplicativo. O aplicativo não precisa estar no caminho do sistema para iniciar.

Além disso, você pode dar amplo acesso ao sistema de arquivos ao seu aplicativo de console UWP, adicionando a funcionalidade restrita broadFileSystemAccess conforme descrito em Permissões de acesso a arquivos. Esse recurso funciona com as APIs no namespace Windows.Storage.

Mais de uma instância de um aplicativo de console UWP pode ser executada de uma vez porque o modelo adiciona a funcionalidade SupportsMultipleInstances ao arquivo Package.appxmanifest de seu aplicativo.

O modelo também adiciona a funcionalidade Subsystem="console" ao arquivo Package.appxmanifest, que indica que esse aplicativo UWP é um aplicativo de console. Observe os prefixos desktop4 e iot2 namespace. Só há suporte para aplicativos de console UWP na área de trabalho e projetos da Internet das Coisas (IoT).

<Package
  ...
  xmlns:desktop4="http://schemas.microsoft.com/appx/manifest/desktop/windows10/4" 
  xmlns:iot2="http://schemas.microsoft.com/appx/manifest/iot/windows10/2" 
  IgnorableNamespaces="uap mp uap5 desktop4 iot2">
  ...
  <Applications>
    <Application Id="App"
    ...
      desktop4:Subsystem="console" 
      desktop4:SupportsMultipleInstances="true" 
      iot2:Subsystem="console" 
      iot2:SupportsMultipleInstances="true"  >
      ...
      <Extensions>
          <uap5:Extension 
            Category="windows.appExecutionAlias" 
            Executable="YourApp.exe" 
            EntryPoint="YourApp.App">
            <uap5:AppExecutionAlias desktop4:Subsystem="console">
              <uap5:ExecutionAlias Alias="YourApp.exe" />
            </uap5:AppExecutionAlias>
          </uap5:Extension>
      </Extensions>
    </Application>
  </Applications>
    ...
</Package>

Considerações adicionais para aplicativos de console UWP

  • Somente os aplicativos C++/WinRT e C++/CX UWP podem ser aplicativos de console.
  • Os aplicativos de console UWP devem destinar-se ao tipo de projeto Área de trabalho ou IoT.
  • Os aplicativos de console UWP podem não criar uma janela. Eles não podem usar MessageBox() ou Location() ou qualquer outra API que possa criar uma janela por qualquer motivo, como solicitações de consentimento do usuário.
  • Aplicativos de console UWP não podem consumir tarefas em segundo plano nem servem como uma tarefa em segundo plano.
  • Com exceção de Ativação de linha de comando, os aplicativos de console UWP não dão suporte a contratos de ativação, incluindo associação de arquivo, associação de protocolo etc.
  • Embora os aplicativos de console UWP ofereçam suporte a várias instâncias, não dão suporte a Redirecionamento de várias instâncias
  • Para obter uma lista de APIs do Win32 que estão disponíveis para aplicativos UWP, consulte APIs Win32 e COM para aplicativos UWP