Создание консольного приложения для универсальной платформы 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.