Partilhar via


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 Universal Windows Platform (UWP).

Observação

A extensão Console App (Universal) Project Templates não oferece suporte ao Visual Studio 2022. O Visual Studio 2017 ou o Visual Studio 2019 é necessário para instalar e usar esses modelos.

A partir do Windows 10, versão 1803, você pode escrever aplicativos de console UWP C++/WinRT ou C++/CX que são executados em uma janela de console, como uma janela de 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 do Universal C Runtime , como printf e getchar. Os 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 a partir da 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 UWP Console

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

Adicione o seu código ao main()

Os modelos adicionam Program.cpp, que contém a função main(). É aqui que a execução começa 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 é encerrado quando o controle retorna de main().

O seguinte exemplo de Program.cpp é adicionado pelo modelo de Console App C++/WinRT:

#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 UWP Console

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

Além disso, podes conceder amplo acesso ao sistema de ficheiros ao teu aplicativo de consola UWP, adicionando a capacidade restrita broadFileSystemAccess, conforme descrito em Permissões de acesso a ficheiros. Esse recurso funciona com APIs no namespace Windows.Storage .

Mais de uma instância de um aplicativo de Console UWP pode ser executada por vez porque o modelo adiciona o recurso SupportsMultipleInstances ao arquivo Package.appxmanifest do seu aplicativo.

O modelo também adiciona a Subsystem="console" capacidade ao arquivo Package.appxmanifest, o que indica que esse aplicativo UWP é um aplicativo de console. Observe os prefixos desktop4 iot2 e iot2 namespace . Os aplicativos UWP Console são suportados apenas em projetos de área de trabalho e 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 aplicativos UWP C++/WinRT e C++/CX podem ser aplicativos de console.
  • Os aplicativos de Console UWP devem ter como destino o tipo de projeto Área de Trabalho ou IoT.
  • Os aplicativos de console UWP não podem criar uma janela. Eles não podem usar MessageBox() ou Location(), ou qualquer outra API que possa criar uma janela por qualquer motivo, como prompts de consentimento do usuário.
  • Os aplicativos de console UWP não podem consumir tarefas em segundo plano nem servir como uma tarefa em segundo plano.
  • Com exceção de Command-Linede ativação, os aplicativos de console UWP não suportam contratos de ativação, incluindo associação de arquivos, associação de protocolo, etc.
  • Embora os aplicativos de console UWP ofereçam suporte a várias instâncias, eles não suportam 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