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 Projektvorlagenerweiterung "Konsolen-App (Universal)" unterstützt Visual Studio 2022 nicht. Entweder Visual Studio 2017 oder Visual Studio 2019 ist erforderlich, um diese Vorlagen zu installieren und zu verwenden.

Ab Windows 10 Version 1803 können Sie C++/WinRT- oder C++/CX-UWP-Konsolen-Apps schreiben, die in einem Konsolenfenster wie einem DOS- oder PowerShell-Konsolenfenster ausgeführt werden. 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 das Startmenü angeheftet werden kann. UWP-Konsolen-Apps können über das Startmenü gestartet werden, obwohl Sie sie in der Regel über die Befehlszeile starten.

Im Folgenden finden Sie ein Video zum Erstellen einer UWP-Konsolen-App.

Verwenden einer Vorlage für eine UWP-Konsolen-App

Um eine UWP-Konsolen-App zu erstellen, installieren Sie zuerst die Projektvorlagen für die Konsolen-App (universal), die im Visual Studio Marketplace verfügbar sind. Die installierten Vorlagen sind dann unter New Project>Installed>Other Languages>Visual C++>Windows Universal as Console App C++/WinRT (Universal Windows) und Console App C++/CX (Universal Windows) verfügbar.

Fügen Sie Ihren Code zu Standard() hinzu.

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

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 von dem Verzeichnis aus auf das Dateisystem zugreifen, aus dem und darunter ausgeführt wird. Dies ist möglich, da die Vorlage die AppExecutionAlias-Erweiterung der Datei Package.appxmanifest Ihrer App hinzufügt. Diese Erweiterung ermöglicht es dem Benutzer auch, den Alias aus einem Konsolenfenster einzugeben, um die App zu starten. Die App muss sich nicht im Systempfad befinden, um gestartet zu werden.

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 unter Dateizugriffsberechtigungen beschrieben. Diese Funktion funktioniert mit APIs im Windows.Storage-Namespace .

Mehrere instance einer UWP-Konsolen-App können gleichzeitig ausgeführt werden, da die Vorlage der Datei Package.appxmanifest Ihrer App die SupportsMultipleInstances-Funktion hinzufügt.

Die Vorlage fügt die Subsystem="console" Funktion auch der Datei Package.appxmanifest hinzu, die angibt, dass es sich bei dieser UWP-App um eine Konsolen-App handelt. Beachten Sie die desktop4 Iot2-Präfixe namespace und . UWP-Konsolen-Apps werden nur in Desktop- und IoT-Projekten (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>

Zusätzliche Überlegungen zu UWP-Konsolen-Apps

  • Nur C++/WinRT- und C++/CX-UWP-Apps dürfen Konsolen-Apps sein.
  • UWP-Konsolen-Apps müssen auf den Desktop- oder IoT-Projekttyp ausgerichtet sein.
  • UWP-Konsolen-Apps erstellen möglicherweise kein Fenster. Sie können MessageBox() oder Location() oder keine andere API verwenden, die aus irgendeinem Grund ein Fenster erstellen kann, z. B. Benutzereinwilligungsaufforderungen.
  • UWP-Konsolen-Apps können keine Hintergrundaufgaben nutzen oder als Hintergrundaufgabe dienen.
  • 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.