本文内容
使用 UWP 控制台应用模板
将代码添加到 main()
UWP 控制台应用行为
UWP 控制台应用的其他注意事项
本主题介绍如何创建 C++/WinRT 或 C++/CX 通用 Windows 平台 (UWP) 控制台应用。
备注
控制台应用(通用)项目模板 扩展不支持 Visual Studio 2022。 安装并使用这些模板需要 Visual Studio 2017 或 Visual Studio 2019。
从 Windows 10 版本 1803 开始,可编写在控制台窗口(如 DOS 或 PowerShell 控制台窗口)中运行的 C++/WinRT 或 C++/CX UWP 控制台应用。 控制台应用将控制台窗口用于输入和输出,并使用通用 C 运行时 函数(例如 printf 和 getchar )。 UWP 控制台应用可以发布到 Microsoft 应用商店。 应用列表中的条目和可固定到开始菜单的主磁贴。 可以从“开始”菜单启动 UWP 控制台应用,但通常从命令行启动它们。
若要了解实际操作,请观看以下视频,了解创建 UWP 控制台应用的有关信息。
若要创建 UWP 控制台应用,请先安装 Visual Studio Marketplace 中 提供的控制台应用(通用)项目模板 。 然后,安装的模板将作为“控制台应用 C++/WinRT(通用 Windows)”和“控制台应用 C++/CX(通用 Windows)”在“新建项目”>“已安装”>“其他语言”>“Visual C++”>“Windows 通用”下提供 。
模板添加 Program.cpp ,其中包含函数 main()
。 这是在 UWP 控制台应用中开始执行的位置。 使用 __argc
和 __argv
参数访问命令行参数。 当控件从 main()
中返回时,UWP 控制台应用将退出。
以下 Program.cpp 示例由“控制台应用 C++/WinRT”模板添加 :
#include "pch.h"
using namespace winrt;
int __cdecl main ()
{
wprintf(L"Parsed command-line arguments:\n" );
for (int i = 0 ; i < __argc; i++)
{
wprintf(L"__argv[%d] = %S\n" , i, __argv[i]);
}
wprintf(L"Press 'Enter' to continue: " );
getchar();
}
UWP 控制台应用可以从运行它的目录(如下所示)访问文件系统。 这是可能的,因为模板将 AppExecutionAlias 扩展添加到应用的 Package.appxmanifest 文件。 此扩展还允许用户从控制台窗口键入别名以启动应用。 应用不需要位于要启动的系统路径中。
还可以通过添加受限功能broadFileSystemAccess
(如文件访问权限中所述 )向 UWP 控制台应用授予对文件系统的广泛访问权限。 此功能适用于 Windows.Storage 命名空间中的 API。
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 >
仅 C++/WinRT 和 C++/CX UWP 应用可能是控制台应用。
UWP 控制台应用必须面向桌面或 IoT 项目类型。
UWP 控制台应用可能无法创建窗口。 它们不能使用 MessageBox() 或 Location(),或其他任何可能因任意原因(例如用户同意提示)创建窗口的 API。
UWP 控制台应用可能不使用后台任务,也不能用作后台任务。
除了命令行激活之外 ,UWP 控制台应用不支持激活协定,包括文件关联、协议关联等。
尽管 UWP 控制台应用支持多实例化,但它们不支持 多实例重定向
有关可用于 UWP 应用的 Win32 API 的列表,请参阅 适用于 UWP 应用的 Win32 和 COM API