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
- Solo las aplicaciones para UWP de C++/WinRT y C++/CX pueden ser aplicaciones de consola.
- Las aplicaciones de consola de UWP deben tener como destino el tipo de proyecto Escritorio o IoT.
- Es posible que las aplicaciones de consola de UWP no creen una ventana. No pueden usar MessageBox() ni Location() ni ninguna otra API que pueda crear una ventana por cualquier motivo, como solicitudes de consentimiento del usuario.
- Es posible que las aplicaciones de consola de UWP no consuman tareas en segundo plano ni actúen como una tarea en segundo plano.
- A excepción de la activación de la línea de comandos, las aplicaciones de consola para UWP no admiten contratos de activación, incluida la asociación de archivos, la asociación de protocolos, etcetera.
- Aunque las aplicaciones de consola para UWP admiten instancias múltiples, no admiten el redireccionamiento de instancias múltiples.
- Para obtener una lista de las API de Win32 que están disponibles para las aplicaciones para UWP, consulta Api win32 y COM para aplicaciones para UWP.