Partager via


Créer une application de console de plateforme Windows universelle

Cette rubrique explique comment créer une application console C++/WinRT ou C++/CX plateforme Windows universelle (UWP).

Remarque

L’extension Modèles de projet d’application console (universelle) ne prend pas en charge Visual Studio 2022. Visual Studio 2017 ou Visual Studio 2019 est requis pour installer et utiliser ces modèles.

À compter de Windows 10, version 1803, vous pouvez écrire des applications console C++/WinRT ou C++/CX UWP qui s’exécutent dans une fenêtre de console, telle qu’une fenêtre de console DOS ou PowerShell. Les applications console utilisent la fenêtre de console pour l’entrée et la sortie, et peuvent utiliser des fonctions runtime C universelles telles que printf et getchar. Les applications console UWP peuvent être publiées dans le Microsoft Store. Ils ont une entrée dans la liste des applications et une vignette principale qui peut être épinglée au menu Démarrer. Les applications console UWP peuvent être lancées à partir du menu Démarrer, bien que vous les lancez généralement à partir de la ligne de commande.

Pour en voir une en action, voici une vidéo sur la création d’une application console UWP.

Utiliser un modèle d’application console UWP

Pour créer une application console UWP, installez d’abord les modèles de projet d’application console (universelle), disponibles à partir de Visual Studio Marketplace. Les modèles installés sont ensuite disponibles sous New Project>Installed>Other Languages>Visual C++>Windows Universal as Console App C++/WinRT (Universal Windows) and Console App C++/CX (Windows universel).

Ajouter votre code à main()

Les modèles ajoutent Program.cpp, qui contient la main() fonction. C’est là que l’exécution commence dans une application console UWP. Accédez aux arguments de ligne de commande avec les paramètres et __argv les __argc paramètres. L’application console UWP se ferme lorsque le contrôle retourne main().

L’exemple suivant de Program.cpp est ajouté par le modèle C++/WinRT de l’application 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();
}

Comportement de l’application console UWP

Une application console UWP peut accéder au système de fichiers à partir du répertoire à partir duquel elle est exécutée et ci-dessous. Cela est possible, car le modèle ajoute l’extension AppExecutionAlias au fichier Package.appxmanifest de votre application. Cette extension permet également à l’utilisateur de taper l’alias à partir d’une fenêtre de console pour lancer l’application. L’application n’a pas besoin d’être dans le chemin d’accès système à lancer.

Vous pouvez également accorder un accès étendu au système de fichiers à votre application console UWP en ajoutant la fonctionnalité broadFileSystemAccess restreinte, comme décrit dans les autorisations d’accès aux fichiers. Cette fonctionnalité fonctionne avec les API de l’espace de noms Windows.Storage .

Plusieurs instances d’une application console UWP peuvent s’exécuter à la fois, car le modèle ajoute la fonctionnalité SupportsMultipleInstances au fichier Package.appxmanifest de votre application.

Le modèle ajoute également la Subsystem="console" fonctionnalité au fichier Package.appxmanifest, ce qui indique que cette application UWP est une application console. Notez les desktop4 préfixes et iot2 namespace . Les applications console UWP ne sont prises en charge que sur les projets IoT (Bureau et Internet des objets).

<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>

Considérations supplémentaires relatives aux applications console UWP