Erstellen einer Konsolen-App für die Universelle Windows-Plattform

In diesem Thema wird beschrieben, wie Sie eine C++/WinRT- oder C++/CX-Universelle Windows-Plattform Konsolen-App (UWP) erstellen.

Hinweis

Die Project Templates-Erweiterung der Konsolen-App (Universal) unterstützt Visual Studio 2022 nicht. Zum Installieren und Verwenden dieser Vorlagen ist entweder Visual Studio 2017 oder Visual Studio 2019 erforderlich.

Ab Windows 10, Version 1803, können Sie C++/WinRT- oder C++/CX-UWP-Konsolen-Apps schreiben, die in einem Konsolenfenster ausgeführt werden, z. B. ein DOS- oder PowerShell-Konsolenfenster. Konsolen-Apps verwenden das Konsolenfenster für Eingabe und Ausgabe und können universelle C-Runtime-Funktionen wie printf und getchar verwenden. UWP-Konsolen-Apps können im Microsoft Store veröffentlicht werden. Sie verfügen über einen Eintrag in der App-Liste und eine primäre Kachel, die an die Menü angeheftet werden kann. UWP-Konsolen-Apps können über die Menü gestartet werden, sie werden jedoch in der Regel über die Befehlszeile gestartet.

Hier sehen Sie ein Video zum Erstellen einer UWP-Konsolen-App.

Verwenden einer UWP-Konsolen-App-Vorlage

Um eine UWP-Konsolen-App zu erstellen, installieren Sie zuerst die Im Visual Studio Marketplace verfügbaren Project-Vorlagen der Konsolen-App (Universal).To create a UWP console app, first install the Console App (Universal) Project Templates, available from the Visual Studio Marketplace. Die installierten Vorlagen sind dann unter "New Project>Installed>Other Languages>Visual C++Windows Universal as Console App C++>/WinRT (Universal Windows) and Console App C++/CX (Universal Windows)" verfügbar.

Hinzufügen ihres Codes zu main()

Die Vorlagen fügen Program.cpp hinzu, die die main() Funktion enthält. Hier beginnt die Ausführung in einer UWP-Konsolen-App. Greifen Sie mit den und __argv den Parametern auf die __argc Befehlszeilenargumente zu. Die UWP-Konsolen-App wird beendet, wenn das Steuerelement von main().

Das folgende Beispiel für Program.cpp wird von der C++/WinRT-Vorlage der Konsolen-App hinzugefügt:

#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();
}

Verhalten der UWP-Konsolen-App

Eine UWP-Konsolen-App kann über das Verzeichnis, aus dem sie ausgeführt wird, auf das Dateisystem zugreifen, und darunter. Dies ist möglich, da die Vorlage die Erweiterung "AppExecutionAlias " zur Datei "Package.appxmanifest" Ihrer App hinzufügt. Mit dieser Erweiterung kann der Benutzer auch den Alias aus einem Konsolenfenster eingeben, um die App zu starten. Die App muss sich nicht im Systempfad befinden, um zu starten.

Darüber hinaus können Sie Ihrer UWP-Konsolen-App umfassenden Zugriff auf das Dateisystem gewähren, indem Sie die eingeschränkte Funktion broadFileSystemAccess hinzufügen, wie in den Dateizugriffsberechtigungen beschrieben. Diese Funktion funktioniert mit APIs im Windows.Storage-Namespace.

Mehrere Instanzen einer UWP-Konsolen-App können gleichzeitig ausgeführt werden, da die Vorlage die SupportsMultipleInstances-Funktion zur Datei "Package.appxmanifest" ihrer App hinzufügt.

Die Vorlage fügt außerdem der Datei "Package.appxmanifest" die Subsystem="console" Funktion hinzu, die angibt, dass es sich bei dieser UWP-App um eine Konsolen-App handelt. Beachten Sie die desktop4 Präfixe und iot2 namespace . UWP-Konsolen-Apps werden nur für Desktop- und IoT-Projekte (Internet of Things) unterstützt.

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

Weitere Überlegungen für UWP-Konsolen-Apps

  • Nur C++/WinRT- und C++/CX-UWP-Apps können Konsolen-Apps sein.
  • UWP-Konsolen-Apps müssen auf den Desktop- oder IoT-Projekttyp abzielen.
  • UWP-Konsolen-Apps erstellen möglicherweise kein Fenster. Sie können MessageBox() oder Location() oder eine andere API nicht verwenden, die aus irgendeinem Grund ein Fenster erstellen kann, z. B. Benutzereinwilligungsaufforderungen.
  • UWP-Konsolen-Apps verwenden möglicherweise keine Hintergrundaufgaben oder dienen nicht als Hintergrundaufgabe.
  • Mit Ausnahme der Befehlszeilenaktivierung unterstützen UWP-Konsolen-Apps keine Aktivierungsverträge, einschließlich Dateizuordnung, Protokollzuordnung usw.
  • Obwohl UWP-Konsolen-Apps Multi-Instancing unterstützen, unterstützen sie keine Multi-Instancing-Umleitung
  • Eine Liste der Win32-APIs, die für UWP-Apps verfügbar sind, finden Sie unter Win32- und COM-APIs für UWP-Apps