Unity 엔진에서 Windows App을 실행하는 처리를 구현했던 내용.
Windows App 중 그림판 3D ( Paint 3D )를 실행하기 위해서 먼저 그림판 3D의 exe 파일의 이름을 알아냈다.
그림판 3D가 실행 중일 때 작업 관리자의 세부 정보 부분에서 표시된 프로그램의 이름은 'PaintStudio.View.exe' 라는 이름이었다.
그리고 해당 exe 파일을 실행하기 위해 Process.Start() 를 이용해 처리를 구현하고 테스트를 진행했다.
Process.Start("PaintStudio.View.exe");
해당 코드의 결과는 에러가 발생하고 예외처리를 하여 '지정된 파일을 찾을 수 없습니다' 라는 내용을 확인하였다.
아마도 실제 exe의 경로가 없어서 파일을 못 찾는 것 같다.
( notepad.exe, mspaint.exe 를 입력하여 메모장이랑 그림판을 실행할 수 있는데 예약인건지 기본 경로가 있는 것인지 모르겠다. 레지스트리에 등록되어 있는 것 같다. )
실제 파일 경로는 C:\Program Files\WindowsApps\Microsoft.MSPaint_6.2003.4017.0_x64__8wekyb3d8bbwe 였으며 경로를 넣어서 실행하는 처리를 구현하고 테스트를 진행했다.
Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.WorkingDirectory = "C:\\Program Files\\WindowsApps\\Microsoft.MSPaint_6.2003.4017.0_x64__8wekyb3d8bbwe";
process.StartInfo.FileName = "PaintStudio.View.exe";
process.Start();
해당 코드의 결과는 경로 또는 파일에 액세스할 수 없다는 경고창이 나온다. ( 어떤 작업 때문에 그림판 3D를 재설치 했었는데 재설치 이후에 PaintStudio.View.exe 파일을 실행하면 특정 dll들이 없다는 경고창들이 나오며 그림판 3D를 실행했을 때는 문제 없이 실행된다. )
액세스할 수 없다는 경고에 대하여 검색해보니 권한 문제라고 하여 이것저것 찾아보며 하다가 powershell 이나 cmd를 이용해서 실행하는 방식까지 검색했는데 삽질을 하다보니 결국에는 방법을 찾게 되었다.
https://docs.microsoft.com/ko-kr/windows/uwp/launch-resume/launch-default-app
URI 방식으로 실행하는 방식이며 아래의 코드를 실행하면 마이크로소프트 스토어가 열린다.
Process.Start("ms-windows-store:");
그림판 3D의 경우에는 대충 때려맞춰서 입력해보니 "ms-paint:" 를 입력하면 열리는 것을 확인했다.
다른 windows app 들도 실행이 가능할 것 같은데 URI 스키마를 알아내야 하는 것 같다.
마이크로소프트 스토어의 경우 추가적인 URI 스키마들이 있어서 특정한 앱을 검색하는 식으로 여는 것도 가능한 것 같다. 아래의 코드들을 실행해서 마이크로소프트 스토어를 열 수 있다.
//스토어에서 프로토콜과 연결된 제품에 대한 검색을 실행.
Process.Start("ms-windows-store://assoc/?Protocol=ms-paint");
//스토어에서 제품 ID 값을 가지고 제품 페이지를 띄운다.
//마이크로소프트 스토어 앱 자체에서 제품 ID를 알아내는 방법이 있는지는 모르겠다.
//마이크로소프트 스토어 '웹페이지'에서 제품 페이지를 띄우면 제품 ID를 알 수 있다.
Process.Start("ms-windows-store://pdp/?ProductId=9nblggh5fv99");
https://docs.microsoft.com/ko-kr/windows/uwp/launch-resume/launch-store-app