您实际上有两个问题:
- 如何从WinForms应用程序启动协议?
- 如何正确启动UWP应用程序。
要从WinForms应用程序启动协议,请使用带有 UseShellExecute = true 的 Process 对象。不要尝试使用 Explorer.exe 作为进程启动它。
启动应用程序的最佳方法是通过协议,只要该应用程序定义了一个协议即可。如果您控制该应用程序,则可以像 @Romasz 所示那样定义协议:处理 URI 启动
您在命令行中使用的 shell:appsFolder 技巧是很方便的脚本技巧,但它没有记录或保证。不要编写依赖于它的代码。
一旦您拥有一个协议,就可以使用 Process.Start 启动它:
这里是启动 People 应用程序的 shell 技巧:
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();
由于「People」应用程序定义了一个记录的协议,因此最好使用该方式启动它。这还可以让我们选择自己想要的联系人:
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问答,网址为IApplicationActivationManager::ActivateApplication in C#?