Создание консольного приложения для универсальной платформы 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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по