建立通用 Windows 平台主控台應用程式
本主題介紹如何建立 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 Store。 他們在應用程式清單中有一個專案,以及可釘選到開始功能表 的主要磚。 UWP 控制台應用程式可以從開始功能表 啟動,不過您通常會從命令行啟動它們。
若要查看作用中的影片,以下是關於建立 UWP 控制台應用程式的影片。
使用 UWP 主控台應用程式範本
若要建立 UWP 控制台應用程序,請先安裝 Visual Studio Marketplace 中提供的控制台應用程式 (通用) 專案範本。 然後,已安裝的範本可在>新專案已安裝>其他語言> Visual C++>Windows Universal 下作為控制台應用程式 C++/WinRT (通用 Windows) 和控制台應用程式 C++/CX (通用 Windows) 使用。
將程式碼加入 main()
範本會新增 Program.cpp,其中包含 main()
函式。 這是 UWP 主控台應用程式中開始執行的位置。 使用 __argc
和 __argv
參數存取命令行自變數。 當控件從 main()
傳回時,UWP 控制台應用程式會結束。
主控台應用程式 C++/WinRT 樣本會新增下列 Program.cpp 範例:
#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 檔案。 此延伸模組也可讓使用者從主控台視窗輸入別名,以啟動應用程式。 應用程式不需要位於要啟動的系統路徑中。
您也可以藉由新增受限功能 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>
UWP 主控台應用程式的其他考慮
- 只有 C++/WinRT 和 C++/CX UWP 應用程式可能是控制台應用程式。
- UWP 主控台應用程式必須以桌面或 IoT 專案類型為目標。
- UWP 主控台應用程式可能不會建立視窗。 他們不能使用 MessageBox()、Location() 或任何其他可能出於任何原因 (例如使用者同意提示) 建立視窗的 API。
- UWP 控制台應用程式可能不會取用背景工作,也不能做為背景工作。
- 除命令列啟動外,UWP 控制台應用程式不支援啟動合約,包括檔案關聯、協定關聯等。
- 儘管 UWP 控制台應用支援多執行個體,但它們不支援多執行個體重定向
- 如需適用於 UWP app 的 Win32 API 清單,請參閱 適用於 UWP 應用程式的 Win32 和 COM API