2017-01-27 113 views
0

我想從我的winform運行Windows通用應用程序使用以下代碼,但不幸的是它打開文檔文件夾。我是UWP應用程序開發的新成員。這是啓動UWP應用程序的正確方法嗎?如何從winform啓動Windows通用應用程序

Process p = new Process(); 
      ProcessStartInfo startInfo = new ProcessStartInfo(); 
      startInfo.FileName = "explorer.exe"; 
      startInfo.Arguments = @"shell:appsFolder\Microsoft.SDKSamples.CameraAdvancedCapture.CS_8wekyb3d8bbwe!App"; 
      p.StartInfo = startInfo; 
      p.Start(); 

回答

1

您可以使用Automate launching Windows 10 UWP apps

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

哪裏MyPackageName_ph1m9x8skttmg是您UWP應用的Package family nameAppId是下<Applications> XML元素的Package.appxmanifest文件Application Id

1

你真的在這裏有兩個問題:

  1. 如何從一個WinForms應用程序
  2. 如何正確地推出了UWP應用程序啓動的協議。

要啓動從WinForms應用程序的協議使用Process對象與UseShellExecute =真。不要嘗試使用Explorer.exe作爲進程啓動它。

啓動應用程序的最佳方式是通過協議,只要應用程序定義一個。如果你控制應用程序,那麼你可以定義一個協議,如@Romasz所示:Handle URI activation

你在命令行中使用的shell:appsFolder技巧是一種方便的腳本攻擊,但它沒有記錄或保證。不要運送代碼依賴於它。

一旦你有一個協議,你可以用的Process.Start啓動它:

這裏的殼劈啓動聯繫人應用:

Process p = new Process(); 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.UseShellExecute = true; 
startInfo.FileName = startInfo.FileName = @"shell:appsFolder\Microsoft.People_8wekyb3d8bbwe!App"; 
p.StartInfo = startInfo; 
p.Start(); 

由於人們應用defines a documented protocol它會是更好的以這種方式啓動它。這也可以讓我們選擇我們想要的接觸:

Process p = new Process(); 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.UseShellExecute = true; 
startInfo.FileName = @"ms-people:viewcontact?PhoneNumber=8675309"; 
p.StartInfo = startInfo; 
p.Start(); 

推出UWP的應用程序,沒有定義協議的正確方法是使用IApplicationActivationManager。這是shell將在內部使用的內容,它可以讓您更好地控制您正在啓動的內容以及操作方式。

從C#使用IApplicationActivationManager有一個stackoverflow Q/A在IApplicationActivationManager::ActivateApplication in C#?

相關問題