本主題描述如何建立 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 市集。 他們在應用程式列表中有一個專案,並且有一個可以釘選到 [開始] 功能表的主要磚塊。 UWP 控制台應用程式可以從 [開始] 功能表啟動,不過您通常會從命令行啟動它們。
若要查看UWP控制台應用程式的運作,這裡有一段相關的影片。
使用 UWP 主控台應用程式範本
若要建立 UWP 控制台應用程式,請先安裝可從 Visual Studio Marketplace 取得的控制台應用程式 (通用) 專案範本。 然後,[新專案]>中的 [已安裝] 節點下,>在 [其他語言]>Visual C++,>[Windows 通用] 類別中,可以找到以下的已安裝範本:[控制台應用程式 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 控制台應用程式可能不會取用背景工作,也不能做為背景工作。
- 除了 Command-Line 啟用之外,UWP 控制台應用程式不支援啟用合約,包括檔案關聯、通訊協定關聯等。
- 雖然 UWP 控制台應用程式支援多重實例,但不支援 多重實例重新導向
- 如需適用於 UWP 應用程式的 Win32 和 COM API 清單,請參閱 Win32 和 COM API 適用於 UWP 應用程式