■ UWP 앱을 실행하는 방법을 보여준다.
▶ ActivateOptions.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
namespace TestProject { /// <summary> /// 활성 옵션 /// </summary> public enum ActivateOptions { /// <summary> /// None /// </summary> None = 0x00000000, /// <summary> /// Design Mode /// </summary> DesignMode = 0x00000001, /// <summary> /// No Error UI /// </summary> NoErrorUI = 0x00000002, /// <summary> /// No Splash Screen /// </summary> NoSplashScreen = 0x00000004 } } |
▶ IApplicationActivationManager.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
using System; using System.Runtime.InteropServices; namespace TestProject { /// <summary> /// 애플리케이션 활성 관리자 인터페이스 /// </summary> [ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IApplicationActivationManager { //////////////////////////////////////////////////////////////////////////////////////////////////// Method #region 애플리케이션 활성화하기 - ActivateApplication(appUserModelID, argumentList, options, processID) /// <summary> /// 애플리케이션 활성화하기 /// </summary> /// <param name="appUserModelID">앱 사용자 모델 ID</param> /// <param name="argumentList">인자 리스트</param> /// <param name="options">활성 옵션</param> /// <param name="processID">프로세스 ID</param> /// <returns>처리 결과</returns> IntPtr ActivateApplication([In] string appUserModelID, [In] string argumentList, [In] ActivateOptions options, [Out] out uint processID); #endregion #region 파일용 활성화하기 - ActivateForFile(appUserModelID, itemArray, verb, processID) /// <summary> /// 파일용 활성화하기 /// </summary> /// <param name="appUserModelID">앱 사용자 모델 ID</param> /// <param name="itemArray">항목 배열</param> /// <param name="verb">동사</param> /// <param name="processID">프로세스 ID</param> /// <returns>처리 결과</returns> IntPtr ActivateForFile([In] string appUserModelID, [In] IntPtr itemArray, [In] string verb, [Out] out uint processID); #endregion #region 프로토콜용 활성화하기 - ActivateForProtocol(appUserModelID, itemArray, processID) /// <summary> /// 프로토콜용 활성화하기 /// </summary> /// <param name="appUserModelID">앱 사용자 모델 ID</param> /// <param name="itemArray">항목 배열</param> /// <param name="processID">프로세스 ID</param> /// <returns>처리 결과</returns> IntPtr ActivateForProtocol([In] string appUserModelID, [In] IntPtr itemArray, [Out] out uint processID); #endregion } } |
▶ ApplicationActivationManager.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace TestProject { /// <summary> /// 애플리케이션 활성 관리자 /// </summary> [ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")] public class ApplicationActivationManager : IApplicationActivationManager { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public #region 애플리케이션 활성화하기 - ActivateApplication(appUserModelID, argumentList, options, processID) /// <summary> /// 애플리케이션 활성화하기 /// </summary> /// <param name="appUserModelID">앱 사용자 모델 ID</param> /// <param name="argumentList">인자 리스트</param> /// <param name="options">활성 옵션</param> /// <param name="processID">프로세스 ID</param> /// <returns>처리 결과</returns> [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] public extern IntPtr ActivateApplication([In] string appUserModelID, [In] string argumentList, [In] ActivateOptions options, [Out] out uint processID); #endregion #region 파일용 활성화하기 - ActivateForFile(appUserModelID, itemArray, verb, processID) /// <summary> /// 파일용 활성화하기 /// </summary> /// <param name="appUserModelID">앱 사용자 모델 ID</param> /// <param name="itemArray">항목 배열</param> /// <param name="verb">동사</param> /// <param name="processID">프로세스 ID</param> /// <returns>처리 결과</returns> [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] public extern IntPtr ActivateForFile([In] string appUserModelID, [In] IntPtr itemArray, [In] string verb, [Out] out uint processID); #endregion #region 프로토콜용 활성화하기 - ActivateForProtocol(appUserModelID, itemArray, processID) /// <summary> /// 프로토콜용 활성화하기 /// </summary> /// <param name="appUserModelID">앱 사용자 모델 ID</param> /// <param name="itemArray">항목 배열</param> /// <param name="processID">프로세스 ID</param> /// <returns>처리 결과</returns> [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] public extern IntPtr ActivateForProtocol([In] string appUserModelID, [In] IntPtr itemArray, [Out] out uint processID); #endregion } } |
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System; namespace TestProject { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { ApplicationActivationManager manager = new ApplicationActivationManager(); uint processID; manager.ActivateApplication("F5702C39-E68B-4700-B7FA-FF68A1B9A461_f764zjf8n42zt!App", null, ActivateOptions.None, out processID); Console.WriteLine($"PROCESS ID : {processID}"); Console.ReadKey(true); } #endregion } } |
※ F5702C39-E68B-4700-B7FA-FF68A1B9A461_f764zjf8n42zt : 해당 UWP 앱의 Package.appmanifest 파일에서 [패키징] 탭의 [패키지 패밀리 이름]