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

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

Примечание.

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

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

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

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

Чтобы создать консольное приложение UWP, сначала установите шаблоны проектов консольного приложения (универсального) из Visual Studio Marketplace. Затем установленные шаблоны доступны в разделе New Project>Installed>Other Languages>Visual C++>Windows Universal as Console App C++/WinRT (универсальная windows) и Консольное приложение C++/CX (универсальная 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

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