[英]How to launch a Windows Universal App from winform
我正在嘗試使用以下代碼從Winform運行Windows Universal App,但不幸的是,它打開了documents文件夾。 我是UWP應用開發的新手。 是啟動UWP應用程序的正確方法嗎?
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();
您這里確實有兩個問題:
要從WinForms應用程序啟動協議,請使用帶有UseShellExecute = true的Process對象。 不要嘗試使用Explorer.exe作為啟動過程。
啟動應用程序的最佳方法是通過協議,只要該應用程序定義了一個即可。 如果您控制應用程序,則可以定義一個協議,如@Romasz所示: 處理URI激活
您在命令行上使用的shell:appsFolder技巧是一個方便的腳本編寫技巧,但沒有記錄或保證。 不要發布依賴於它的代碼。
有了協議后,可以使用Process.Start啟動它:
這是啟動People應用程序的Shell hack:
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();
由於“人脈”應用定義了已記錄的協議,因此最好以這種方式啟動它。 這也可以讓我們選擇所需的聯系人:
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 :: ActivateApplication中,如何使用來自C#的IApplicationActivationManager進行堆棧溢出Q / A ?
您可以使用自動啟動Windows 10 UWP應用
"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\microsoft.windows.softwarelogo.appxlauncher.exe" MyPackageName_ph1m9x8skttmg!AppId
其中MyPackageName_ph1m9x8skttmg
是您的UWP應用的程序Package family name
,而AppId
是您的Package.appxmanifest文件中<Applications>
xml元素下的Application Id
。
您可以為URI方案注冊該應用 ,然后將其激活。 在應用程序內部,您將必須處理OnActivated事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.