ユニバーサル Windows プラットフォームを使用してコンソール アプリを作成する

このトピックでは、C++/WinRT または C++/CX ユニバーサル Windows プラットフォーム (UWP) コンソール アプリを作成する方法について説明します。

Note

Console アプリ (ユニバーサル) プロジェクト テンプレート拡張機能は、Visual Studio 2022 をサポートしていません。 これらのテンプレートをインストールして使用するには、Visual Studio 2017 または Visual Studio 2019 が必要です。

Windows 10 Version 1803 以降では、C++ /WinRT または C++/CX UWP コンソール アプリを作成して、DOS や PowerShell コンソールなどのコンソール ウィンドウで実行できるようになりました。 コンソール アプリはコンソール ウィンドウを使用して入力と出力を行い、printfgetchar などの Universal C Runtime 関数を使用できます。 UWP コンソール アプリは、Microsoft Store に公開できます。 アプリの一覧にエントリがあり、スタート メニューにピン留めできるプライマリ タイルがあります。 UWP コンソール アプリは、スタート メニューから起動することができますが、通常はコマンドラインから起動します。

実際の動作を確認するには、UWP コンソール アプリの作成に関するビデオをご覧ください。

UWP コンソール アプリ テンプレートを使用する

UWP コンソール アプリを作成するには、まず、Visual Studio Marketplace から入手できる Console App (ユニバーサル) プロジェクト テンプレートをインストールします。 インストールされているテンプレートは、[新しいプロジェクト] > [インストール] > [他の言語] > [Visual C++] > [Windows ユニバーサル] で、コンソール アプリ C++/WinRT (ユニバーサル Windows) およびコンソール アプリ C++/CX (ユニバーサル Windows) として使用できます。

コードを main() に追加する

テンプレートは、main()関数を含むProgram.cppを追加します。 ここで、UWP コンソール アプリで実行が開始されます。 __argcパラメーターと __argv パラメーターを使用して、コマンド ライン引数にアクセスします。 コントロールが main()から戻ると、UWP コンソール アプリが終了します。

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 コンソール アプリは、実行されるディレクトリから以下のファイル システムにアクセスできます。 これは、テンプレートがアプリの Package.appxmanifest ファイルに AppExecutionAlias 拡張子を追加するためです。 この拡張機能を使用すると、ユーザーはコンソール ウィンドウからエイリアスを入力してアプリを起動することもできます。 アプリを起動するためにシステム パスに存在する必要はありません。

さらに、「File アクセス許可」の説明に従って、制限された機能broadFileSystemAccessを追加することで、ファイル システムへの広範なアクセスを UWP コンソール アプリに付与できます。 この機能は、 Windows.Storage 名前空間の API で動作します。

テンプレートによってアプリの Package.appxmanifest ファイルに SupportsMultipleInstances 機能が追加されるため、UWP コンソール アプリの複数のインスタンスを一度に実行できます。

また、このテンプレートは Package.appxmanifest ファイルに Subsystem="console" 機能を追加します。これは、この 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 コンソール アプリはマルチインスタンス化をサポートしていますが、 Multi-instancing リダイレクトはサポートしていません
  • UWP アプリで使用できる Win32 API の一覧については、UWP アプリの Win32 API と COM API に関するページを参照してください。