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

Notes

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 nécessaire pour installer et utiliser ces modèles.

À compter de Windows 10 version 1803, vous pouvez écrire des applications console UWP C++/WinRT ou C++/CX 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 du runtime C universel 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, mais vous les lancerez 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 Application console (universelle) disponibles à partir de Visual Studio Marketplace. Les modèles installés sont ensuite disponibles sous Nouveau projet>installé>Autres langages>Visual C++>Windows universel en tant qu’application console C++/WinRT (Windows universel) et Application console 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 __argc paramètres et __argv . L’application console UWP se ferme lorsque le contrôle revient à partir de main().

L’exemple suivant de Program.cpp est ajouté par le modèle Application console 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();
}

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 en 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 pour 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 Autorisations d’accès aux fichiers. Cette fonctionnalité fonctionne avec les API de l’espace de noms Windows.Storage .

Plusieurs instance 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 sont uniquement prises en charge sur les projets de bureau et d’Internet des objets (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>

Considérations supplémentaires pour les applications console UWP

  • Seules les applications UWP C++/WinRT et C++/CX peuvent être des applications console.
  • Les applications console UWP doivent cibler le type de projet Bureau ou IoT.
  • Les applications console UWP peuvent ne pas créer de fenêtre. Ils ne peuvent pas utiliser MessageBox() ou Location(), ou toute autre API pouvant créer une fenêtre pour une raison quelconque, par exemple les invites de consentement de l’utilisateur.
  • Les applications console UWP ne peuvent pas utiliser de tâches en arrière-plan ni servir de tâche en arrière-plan.
  • À l’exception de l’activation en ligne de commande, les applications console UWP ne prennent pas en charge les contrats d’activation, y compris l’association de fichiers, l’association de protocole, etc.
  • Bien que les applications console UWP prennent en charge la multi-instanciation, elles ne prennent pas en charge la redirection multi-instanciation
  • Pour obtenir la liste des API Win32 disponibles pour les applications UWP, consultez API Win32 et COM pour les applications UWP