共用方式為


建立通用 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 執行時間 函式,例如 printfgetchar。 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 應用程式