Crear una aplicación de consola de Plataforma universal de Windows

En este tema se describe cómo crear una aplicación de consola de C++/WinRT o C++/CX Plataforma universal de Windows (UWP).

Nota:

La extensión Plantillas de proyecto de aplicación de consola (universal) no admite Visual Studio 2022. Se requiere Visual Studio 2017 o Visual Studio 2019 para instalar y usar estas plantillas.

A partir de Windows 10, versión 1803, puedes escribir aplicaciones de consola de C++/WinRT o C++/CX que se ejecutan en una ventana de consola, como una ventana de consola de DOS o PowerShell. Las aplicaciones de consola usan la ventana de consola para la entrada y salida, y pueden usar funciones de tiempo de ejecución de C universales, como printf y getchar. Las aplicaciones de consola para UWP se pueden publicar en Microsoft Store. Tienen una entrada en la lista de aplicaciones y un icono principal que se puede anclar al menú Inicio. Las aplicaciones de consola para UWP se pueden iniciar desde el menú Inicio, aunque normalmente las iniciarás desde la línea de comandos.

Para ver una en acción, este es un vídeo sobre cómo crear una aplicación de consola para UWP.

Usar una plantilla de aplicación de consola para UWP

Para crear una aplicación de consola para UWP, instale primero las plantillas de proyecto de aplicación de consola (universales), disponibles en Visual Studio Marketplace. Las plantillas instaladas están disponibles en Nuevo proyecto>instalado>Otros lenguajes>Visual C++>Windows Universal como Aplicación de consola C++/WinRT (Windows universal) y Aplicación de consola C++/CX (Windows universal).

Agregar el código a main()

Las plantillas agregan Program.cpp, que contiene la main() función . Aquí es donde comienza la ejecución en una aplicación de consola para UWP. Acceda a los argumentos de la línea de comandos con los __argc parámetros y __argv . La aplicación de consola para UWP se cierra cuando el control vuelve de main().

El ejemplo siguiente de Program.cpp se agrega mediante la plantilla aplicación de consola 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();
}

Comportamiento de la aplicación de consola de UWP

Una aplicación de consola para UWP puede acceder al sistema de archivos desde el directorio desde el que se ejecuta y a continuación. Esto es posible porque la plantilla agrega la extensión AppExecutionAlias al archivo Package.appxmanifest de la aplicación. Esta extensión también permite al usuario escribir el alias desde una ventana de consola para iniciar la aplicación. La aplicación no necesita estar en la ruta de acceso del sistema para iniciarse.

Además, puedes conceder acceso amplio al sistema de archivos a tu aplicación de consola de UWP agregando la funcionalidad broadFileSystemAccess restringida, como se describe en Permisos de acceso a archivos. Esta funcionalidad funciona con las API en el espacio de nombres Windows.Storage.

Se puede ejecutar más de una instancia de una aplicación de consola para UWP a la vez porque la plantilla agrega la funcionalidad SupportsMultipleInstances al archivo Package.appxmanifest de la aplicación.

La plantilla también agrega la Subsystem="console" funcionalidad al archivo Package.appxmanifest, que indica que esta aplicación para UWP es una aplicación de consola. Anote los desktop4 prefijos y iot2 namespace . Las aplicaciones de consola de UWP solo se admiten en proyectos de escritorio e Internet de las cosas (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>

Consideraciones adicionales para aplicaciones de consola para UWP