Delen via


Een universeel Windows-platformconsole-app maken

In dit onderwerp wordt beschreven hoe u een UWP-console-app ( C++/WinRT of C++/CX Universal Windows Platform) maakt.

Opmerking

De uitbreiding Console App (Universal) Project Template biedt geen ondersteuning voor Visual Studio 2022. Visual Studio 2017 of Visual Studio 2019 is vereist voor het installeren en gebruiken van deze sjablonen.

Vanaf Windows 10 versie 1803 kunt u C++/WinRT- of C++/CX UWP-console-apps schrijven die worden uitgevoerd in een consolevenster, zoals een DOS- of PowerShell-consolevenster. Console-apps gebruiken het consolevenster voor invoer en uitvoer en kunnen Universal C Runtime-functies zoals printf en getchar gebruiken. UWP-console-apps kunnen worden gepubliceerd naar de Microsoft Store. Ze hebben een vermelding in de lijst met apps en een primaire tegel die kan worden vastgemaakt aan het Startmenu. UWP-console-apps kunnen worden gestart vanuit het menu Start, maar u start ze meestal vanaf de opdrachtregel.

Hier volgt een video over het maken van een UWP-console-app om er een in actie te zien.

Een UWP Console-app-sjabloon gebruiken

Als u een UWP-console-app wilt maken, installeert u eerst de console-app (universeel) projectsjablonen, beschikbaar via de Visual Studio Marketplace. De geïnstalleerde sjablonen zijn vervolgens beschikbaar in New Project>Installed>Other Languages>Visual C++>Windows Universal als Console App C++/WinRT (Universal Windows) en Console App C++/CX (Universal Windows).

Voeg uw code toe aan main()

De sjablonen voegen Program.cpp toe, die de main() functie bevat. Hier begint de uitvoering in een UWP-console-app. Krijg toegang tot de opdrachtregelargumenten met de __argc en __argv parameters. De UWP-consoleapp wordt afgesloten wanneer de controle terugkeert vanuit main().

Het volgende voorbeeld van Program.cpp wordt toegevoegd door de Console App C++/WinRT-sjabloon:

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

Gedrag van UWP-console-app

Een UWP Console-app heeft toegang tot het bestandssysteem vanuit de map waarin het wordt uitgevoerd en hieronder. Dit is mogelijk omdat de sjabloon de extensie AppExecutionAlias toevoegt aan het bestand Package.appxmanifest van uw app. Met deze extensie kan de gebruiker ook de alias typen vanuit een consolevenster om de app te starten. De app hoeft zich niet in het systeempad te bevinden om te starten.

U kunt ook uitgebreide toegang tot het bestandssysteem verlenen aan uw UWP-console-app door de beperkte mogelijkheid broadFileSystemAccess toe te voegen, zoals beschreven in machtigingen voor bestandstoegang. Deze mogelijkheid werkt met API's in de Windows.Storage-naamruimte .

Meerdere exemplaren van een UWP Console-app kunnen tegelijk worden uitgevoerd omdat de sjabloon de mogelijkheid SupportsMultipleInstances toevoegt aan het package.appxmanifest-bestand van uw app.

De sjabloon voegt ook de Subsystem="console" mogelijkheid toe aan het bestand Package.appxmanifest, wat aangeeft dat deze UWP-app een console-app is. Let op de desktop4 en iot2 namespace voorvoegsels. UWP Console-apps worden alleen ondersteund in IoT-projecten (Desktop and Internet of Things).

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

Aanvullende overwegingen voor UWP-console-apps

  • Alleen C++/WinRT- en C++/CX UWP-apps kunnen console-apps zijn.
  • UWP Console-apps moeten het type Desktop- of IoT-project targeten.
  • UWP-console-apps maken mogelijk geen venster. Ze kunnen geen MessageBox() of Location() of een andere API gebruiken die om welke reden dan ook een venster kan maken, zoals toestemmingsprompts van gebruikers.
  • UWP-console-apps verbruiken mogelijk geen achtergrondtaken en dienen niet als achtergrondtaak.
  • Met uitzondering van Command-Line activering bieden UWP-console-apps geen ondersteuning voor activeringscontracten, waaronder bestandskoppeling, protocolkoppeling, enzovoort.
  • Hoewel UWP-console-apps multi-instancing ondersteunen, bieden ze geen ondersteuning voor multi-instancing-omleiding
  • Zie Win32- en COM-API's voor UWP-apps voor een lijst met Win32-API's die beschikbaar zijn voor UWP-apps