Windows 10 UWP 앱 시작 자동화

소개

개발자는 UWP(유니버설 Windows 플랫폼) 앱을 자동으로 시작할 수 있는 몇 가지 옵션을 제공합니다. 이 문서에서는 프로토콜 활성화 및 시작 정품 인증을 사용하여 앱을 시작하는 방법을 살펴보겠습니다.

프로토콜 활성화 를 사용하면 앱이 지정된 프로토콜에 대한 처리기로 등록할 수 있습니다.

시작 활성화 는 앱 타일에서 시작하는 것과 같은 앱의 일반적인 시작입니다.

각 활성화 방법을 사용하면 명령줄 또는 시작 관리자 애플리케이션을 사용할 수 있습니다. 모든 활성화 방법에 대해 앱이 현재 실행 중인 경우 활성화는 앱을 포그라운드(다시 활성화)로 가져오고 새 활성화 인수를 제공합니다. 이렇게 하면 활성화 명령을 유연하게 사용하여 앱에 새 메시지를 제공할 수 있습니다. 새로 업데이트된 앱을 실행하려면 활성화 방법을 위해 프로젝트를 컴파일하고 배포해야 합니다.

프로토콜 활성화

앱에 대한 프로토콜 활성화를 설정하려면 다음 단계를 수행합니다.

  1. Visual Studio에서 Package.appxmanifest 파일을 엽니다.

  2. 선언 탭을 선택합니다.

  3. 사용 가능한 선언 드롭다운 아래에서 프로토콜을 선택한 다음 추가를 선택합니다.

  4. 속성이름 필드에 고유한 이름을 입력하여 앱을 시작합니다.

    Protocol activation

  5. 파일을 저장하고 프로젝트를 배포합니다.

  6. 프로젝트가 배포된 후 프로토콜 활성화를 설정해야 합니다.

  7. 제어판\모든 제어판 항목\기본 프로그램으로 이동하여 파일 형식 또는 프로토콜을 특정 프로그램과 연결합니다. 프로토콜 섹션으로 스크롤하여 프로토콜 이 나열되는지 확인합니다.

이제 프로토콜 활성화가 설정되었으므로 프로토콜을 사용하여 앱을 활성화하기 위한 두 가지 옵션(명령줄 또는 시작 관리자 애플리케이션)이 있습니다.

명령줄

명령 시작과 이전에 설정된 프로토콜 이름, 콜론(":") 및 매개 변수가 있는 명령줄을 사용하여 앱을 프로토콜 활성화할 수 있습니다. 매개 변수는 임의의 문자열일 수 있습니다. 그러나 URI(Uniform Resource Identifier) 기능을 활용하려면 표준 URI 형식을 따르는 것이 좋습니다.

scheme://username:password@host:port/path.extension?query#fragment

Uri 개체에는 이 형식의 URI 문자열을 구문 분석하는 메서드가 있습니다. 자세한 내용은 Uri 클래스(MSDN)를 참조하세요.

예:

>start bingnews:
>start myapplication:protocol-parameter
>start myapplication://single-player/level3?godmode=1&ammo=200

프로토콜 명령줄 활성화는 원시 URI에서 최대 2038자까지 유니코드 문자를 지원합니다.

시작 관리자 애플리케이션

시작하려면 WinRT API를 지원하는 별도의 애플리케이션을 만듭니다. 시작 관리자 프로그램에서 프로토콜 활성화를 사용하여 시작하기 위한 C++ 코드는 다음 샘플에 나와 있습니다. 여기서 PackageURI 는 인수가 있는 애플리케이션에 대한 URI입니다. 예를 들면 myapplication: 다음과 myapplication:protocol activation arguments같습니다.

bool ProtocolLaunchURI(Platform::String^ URI)
{
       IAsyncOperation<bool>^ protocolLaunchAsyncOp;
       try
       {
              protocolLaunchAsyncOp = Windows::System::Launcher::LaunchUriAsync(ref new 
Uri(URI));
       }
       catch (Platform::Exception^ e)
       {
              Platform::String^ dbgStr = "ProtocolLaunchURI Exception Thrown: " 
+ e->ToString() + "\n";
              OutputDebugString(dbgStr->Data());
              return false;
       }

       concurrency::create_task(protocolLaunchAsyncOp).wait();

       if (protocolLaunchAsyncOp->Status == AsyncStatus::Completed)
       {
              bool LaunchResult = protocolLaunchAsyncOp->GetResults();
              Platform::String^ dbgStr = "ProtocolLaunchURI " + URI 
+ " completed. Launch result " + LaunchResult + "\n";
              OutputDebugString(dbgStr->Data());
              return LaunchResult;
       }
       else
       {
              Platform::String^ dbgStr = "ProtocolLaunchURI " + URI + " failed. Status:" 
+ protocolLaunchAsyncOp->Status.ToString() + " ErrorCode:" 
+ protocolLaunchAsyncOp->ErrorCode.ToString() + "\n";
              OutputDebugString(dbgStr->Data());
              return false;
       }
}

시작 관리자 애플리케이션을 사용한 프로토콜 활성화에는 명령줄을 사용한 프로토콜 활성화와 동일한 인수 제한 사항이 있습니다. 둘 다 원시 URI에서 최대 2038자까지 유니코드 문자를 지원합니다.

활성화를 시작하기

시작 활성화를 사용하여 앱을 시작할 수도 있습니다. 설치가 필요하지 않지만 UWP 앱의 AUMID(애플리케이션 사용자 모델 ID)가 필요합니다. AUMID는 패키지 패밀리 이름 뒤에 느낌표와 애플리케이션 ID를 붙입니다.

패키지 패밀리 이름을 가져오는 가장 좋은 방법은 다음 단계를 완료하는 것입니다.

  1. Package.appxmanifest 파일을 엽니다.

  2. 패키징 탭에서 패키지 이름을 입력합니다.

    Launch activation

  3. 패키지 패밀리 이름이 나열되지 않은 경우 PowerShell을 열고 실행 >get-appxpackage MyPackageName 하여 PackageFamilyName을 찾습니다.

애플리케이션 ID는 요소 아래 Package.appxmanifest<Applications> 파일(XML 보기에서 열림)에서 찾을 수 있습니다.

명령줄

UWP 앱의 시작 활성화를 수행하기 위한 도구가 Windows 10 SDK와 함께 설치됩니다. 명령줄에서 실행할 수 있으며 앱의 AUMID를 인수로 시작합니다.

C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe <AUMID>

다음과 같이 표시될 것입니다.

"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe" MyPackageName_ph1m9x8skttmg!AppId

옵션에서 명령줄 인수를 지원하지 않습니다.

시작 관리자 애플리케이션

COM을 사용하여 시작에 사용할 수 있도록 지원하는 별도의 애플리케이션을 만들 수 있습니다. 다음 예제에서는 시작 관리자 프로그램에서 시작 활성화를 사용하여 시작하기 위한 C++ 코드를 보여줍니다. 이 코드를 사용하면 ApplicationActivationManager 개체를 만들고 이전에 찾은 AUMID 및 모든 인수를 전달하는 ActivateApplication을 호출할 수 있습니다. 다른 매개 변수에 대한 자세한 내용은 IApplicationActivationManager::ActivateApplication 메서드(MSDN)를 참조하세요.

#include <ShObjIdl.h>
#include <atlbase.h>

HRESULT LaunchApp(LPCWSTR AUMID)
{
     HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
     if (FAILED(hr))
     {
            wprintf(L"LaunchApp %s: Failed to init COM. hr = 0x%08lx \n", AUMID, hr);
     }
     {
            CComPtr<IApplicationActivationManager> AppActivationMgr = nullptr;
            if (SUCCEEDED(hr))
            {
                   hr = CoCreateInstance(CLSID_ApplicationActivationManager, nullptr,  
CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&AppActivationMgr));
                   if (FAILED(hr))
                   {
                         wprintf(L"LaunchApp %s: Failed to create Application Activation 
Manager. hr = 0x%08lx \n", AUMID, hr);
                   }
            }
            if (SUCCEEDED(hr))
            {
                   DWORD pid = 0;
                   hr = AppActivationMgr->ActivateApplication(AUMID, nullptr, AO_NONE, 
&pid);
                   if (FAILED(hr))
                   {
                         wprintf(L"LaunchApp %s: Failed to Activate App. hr = 0x%08lx 
\n", AUMID, hr);
                   }
            }
     }
     CoUninitialize();
     return hr;
}

이 메서드는 이전 실행 방법(즉, 명령줄 사용)과 달리 전달되는 인수를 지원합니다.

인수 수락

UWP 앱 활성화에 전달된 인수를 허용하려면 앱에 일부 코드를 추가해야 합니다. 프로토콜 활성화 또는 시작 활성화가 발생했는지 확인하려면 OnActivated 이벤트를 재정의하고 인수 형식을 검사 원시 문자열 또는 Uri 개체의 미리 구문 분석된 값을 가져옵니다.

이 예제에서는 원시 문자열을 가져오는 방법을 보여줍니다.

void OnActivated(IActivatedEventArgs^ args)
{
		// Check for launch activation
		if (args->Kind == ActivationKind::Launch)
		{
			auto launchArgs = static_cast<LaunchActivatedEventArgs^>(args);	
			Platform::String^ argval = launchArgs->Arguments;
			// Manipulate arguments …
		}

		// Check for protocol activation
		if (args->Kind == ActivationKind::Protocol)
		{
			auto protocolArgs = static_cast< ProtocolActivatedEventArgs^>(args);
			Platform::String^ argval = protocolArgs->Uri->ToString();
			// Manipulate arguments …
		}
}

요약

요약하자면, 다양한 방법을 사용하여 UWP 앱을 시작할 수 있습니다. 요구 사항 및 사용 사례에 따라 다른 방법보다 다른 방법이 더 적합할 수 있습니다.

참고 항목