Создание консольного приложения для универсальной платформы Windows

В этом разделе описывается создание консольного приложения C++/WinRT или C++/CX универсальная платформа Windows (UWP).

Примечание

Расширение шаблонов проектов консольного приложения (универсального) не поддерживает Visual Studio 2022. Для установки и использования этих шаблонов требуется Visual Studio 2017 или Visual Studio 2019.

Начиная с Windows 10 версии 1803, вы можете создавать консольные приложения UWP на C++/WinRT или C++/CX, которые выполняются в окне консоли, например в окне консоли DOS или PowerShell. Консольные приложения используют окно консоли для ввода и вывода и могут использовать функции универсальной среды выполнения C , такие как printf и getchar. Консольные приложения UWP могут публиковаться в Microsoft Store. Им выделяется запись в списке приложений и основная плитка, которую можно закрепить в меню «Пуск». Консольные приложения UWP можно запускать из меню "Пуск", хотя обычно они запускаются из командной строки.

Чтобы увидеть его в действии, вот видео о создании консольного приложения UWP.

Используйте шаблон консольного приложения UWP

Чтобы создать консольное приложение UWP, сначала установите Шаблоны проектов консольного приложения (универсального), доступные в Visual Studio Marketplace. Установленные шаблоны будут доступны в разделах Новый проект>Установленные>другие языки>Visual C++>Windows Universal as Console App C++/WinRT (Universal Windows) and Console App C++/CX (Universal Windows) (Консольное приложение C++/CX (universal Windows)).

Добавьте свой код в main()

Шаблоны добавляют файл Program.cpp, содержащий функцию main(). Здесь начинается выполнение в консольном приложении UWP. Доступ к аргументам командной строки осуществляется с помощью параметров __argc и __argv. Консольное приложение UWP завершит работу, когда управление возвращается из main().

Следующий пример Program.cpp добавляется шаблоном 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();
}

Поведение консольного приложения UWP

Консольное приложение UWP может получать доступ к файловой системе из каталога, в котором оно выполняется, и к нижестоящим элементам. Это возможно, поскольку шаблон добавляет расширение AppExecutionAlias в файл Package.appxmanifest вашего приложения. Это расширение также позволяет пользователю вводить имя приложения в окне консоли, чтобы запустить приложение. Приложение не требуется указывать в системном пути для запуска.

Можно предоставить обширный доступ к файловой системе консольному приложению UWP, добавив ограниченную возможность broadFileSystemAccess, как описано в разделе Права доступа к файлам. Эта возможность работает с API-интерфейсами в пространстве Windows.Storage.

Одновременно могут выполняться несколько экземпляров консольного приложения UWP, поскольку шаблон добавляет возможность SupportsMultipleInstances в файл Package.appxmanifest вашего приложения.

Шаблон также добавляет возможность Subsystem="console" в файл Package.appxmanifest, и это обозначает, что это приложение UWP является консольным. Обратите внимание на префиксы desktop4 и iot2 namespace. Консольные приложения UWP поддерживаются только в проектах для настольных ПК и Интернета вещей (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>

Дополнительные рекомендации для консольных приложений UWP

  • Консольные приложения могут быть только приложения UWP C++/WinRT и C++/CX.
  • Консольные приложения UWP должны быть предназначены для проектов для настольных ПК или Интернета вещей.
  • Консольные приложения UWP могут не создавать окно. Они не могут использовать MessageBox(), Location() или любой другой API, который может создать окно по любой причине, например по запросу согласия пользователя.
  • Консольные приложения UWP не могут использовать фоновые задачи и не могут выступать в качестве фоновой задачи.
  • Помимо активации в командной строке консольные приложения UWP не поддерживают контракты активации, включая сопоставление файлов, протокол связи и т. д.
  • Несмотря на то что консольные приложения UWP поддерживают создание нескольких экземпляров, они не поддерживают перенаправления нескольких экземпляров
  • Список API-интерфейсов Win32, доступных приложениям UWP, см. в разделе API-интерфейсы Win32 и COM для приложений UWP