There is a UWP application, it needs to be run from another program, the launch of the .exe fails. How can I correctly implement a call to a UWP application from another application?
2 answers
According to this answer, you need to have the identifier of the called application, then appUserModelId . Well, start the application using ApplicationActivationManager which you must first import from COM
public enum ActivateOptions { None = 0x00000000, // No flags set DesignMode = 0x00000001, // The application is being activated for design mode, and thus will not be able to // to create an immersive window. Window creation must be done by design tools which // load the necessary components by communicating with a designer-specified service on // the site chain established on the activation manager. The splash screen normally // shown when an application is activated will also not appear. Most activations // will not use this flag. NoErrorUI = 0x00000002, // Do not show an error dialog if the app fails to activate. NoSplashScreen = 0x00000004, // Do not show the splash screen when activating the app. } //Импортируем интерфейс [ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IApplicationActivationManager { // Activates the specified immersive application for the "Launch" contract, passing the provided arguments // string into the application. Callers can obtain the process Id of the application instance fulfilling this contract. IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ActivateOptions options, [Out] out UInt32 processId); IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId); IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId); } //Импортируем реализацию интерфейса [ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")]//Application Activation Manager class ApplicationActivationManager : IApplicationActivationManager { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/] public extern IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ActivateOptions options, [Out] out UInt32 processId); [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] public extern IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId); [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] public extern IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId); } class Program { static void Main(string[] args) { ApplicationActivationManager appActiveManager = new ApplicationActivationManager();//Class not registered uint pid; appActiveManager.ActivateApplication("2c123c17-8b21-4eb8-8b7f-fdc35c8b7718_n2533ggrncqjt!App", null, ActivateOptions.None, out pid); Console.WriteLine(); Console.ReadLine(); } } It remains only to find this appUserModelId , according to the same answer from the English SO, it can be found in the HKCU branch 
And also a little about the activation protocol:
https://msdn.microsoft.com/ru-ru/windows/uwp/xbox-apps/automate-launching-uwp-apps
You can solve the problem with the following C ++ code
#include "stdafx.h" #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; } int main() { LPCWSTR id = L"0245c1a2-da90-47fc-baec-c0d81db40d77_nkmqfabk7hsn6!App"; LaunchApp(id); return 0; } where LPCWSTR id is the AUMID - the name of the package family with the exclamation mark and the application ID AUMID . The name of the package family can be found in the Package.appxmanifest file of your UWP application. in the <Applications> section