유니버설 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 콘솔 앱을 작성할 수 있습니다. 콘솔 앱은 입력 및 출력에 콘솔 창을 사용하며 printfgetchar와 같은 유니버설 C 런타임 함수를 사용할 수 있습니다. UWP 콘솔 앱을 Microsoft Store에 게시할 수 있습니다. UWP 콘솔 앱에는 앱 목록의 항목과 시작 메뉴에 고정할 수 있는 기본 타일이 있습니다. 일반적으로 명령줄에서 UWP 콘솔 앱을 시작하지만 시작 메뉴에서 시작할 수도 있습니다.

작동 중인 앱을 하나 보려면 UWP 콘솔 앱 만들기에 대한 동영상을 참조하세요.

UWP 콘솔 앱 템플릿 사용

UWP 콘솔 앱을 만들려면 먼저 Visual Studio Marketplace에 있는 콘솔 앱(유니버설) 프로젝트 템플릿을 설치하세요. 설치된 템플릿은 새 프로젝트>설치됨>기타 언어>Visual C++>Windows 유니버설에서 콘솔 앱 C++/WinRT(유니버설 Windows)콘솔 앱 C++/CX(유니버설 Windows)로 사용됩니다.

main()에 코드 추가

템플릿은 main() 함수가 포함된 Program.cpp를 추가합니다. 이는 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에 대해 작동합니다.

템플릿이 SupportsMultipleInstances 접근 권한 값을 앱의 Package.appxmanifest 파일에 추가하므로 여러 개의 UWP 콘솔 앱 인스턴스를 한 번에 실행할 수 있습니다.

또한 템플릿은 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 앱에 사용할 수 있는 Win32 API 목록을 보려면 UWP 앱용 Win32 및 COM API를 참조하세요.