我正在尝试使用以下代码从我的winform运行Windows Universal App但不幸的是它会打开文档文件夹。我是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();
答案 0 :(得分:2)
你真的有两个问题:
要从WinForms应用程序启动协议,请使用带有 UseShellExecute = true 的Process对象。不要尝试使用Explorer.exe启动它作为过程。
启动应用程序的最佳方式是通过协议,只要应用程序定义一个。如果你控制应用程序,那么你可以定义一个协议,如@Romasz所示:Handle URI activation
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();
由于人物应用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问答答案 1 :(得分: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 name
,AppId
是Application Id
xml元素下的Package.appxmanifest文件中的<Applications>
。
答案 2 :(得分:0)
你可以register the app for the URI scheme然后激活它。在应用程序内部,您将必须处理OnActivated事件。
至于更多信息,this MSDN page和this SO answer可能会有所帮助。