如何从winform启动Windows通用应用程序



我正试图使用以下代码从winform运行Windows通用应用程序,但不幸的是,它打开了documents文件夹。我是UWP应用程序开发的新手。这是启动UWP应用程序的正确方式吗?

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

这里确实有两个问题:

  1. 如何从WinForms应用程序启动协议
  2. 如何正确启动UWP应用程序

要从WinForms应用程序启动协议,请使用UseShellExecute=true的Process对象。不要尝试将Explorer.exe作为进程来启动它。

启动应用程序的最佳方式是通过协议,只要应用程序定义了协议。如果你控制应用程序,那么你可以定义一个协议,如@Romasz所示:处理URI激活

你在命令行中使用的shell:appsFolder技巧是一个方便的脚本破解,但它没有文档或保证。不要依赖它来运送代码。

一旦你有了一个协议,你就可以用Process启动它。开始:

以下是启动People应用程序的shell破解:

Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.FileName =  startInfo.FileName =  @"shell:appsFolderMicrosoft.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::ActivateApplication上,有一个关于从C#使用IAApplicationActivationManager的堆栈式问答?

您可以使用自动启动Windows 10 UWP应用程序

"C:Program Files (x86)Windows Kits10App Certification Kitmicrosoft.windows.softwarelogo.appxlauncher.exe" MyPackageName_ph1m9x8skttmg!AppId

其中MyPackageName_ph1m9x8skttmg是UWP应用程序的Package family nameAppId<Applications>xml元素下Package.appxmanifest文件中的Application Id

您可以为URI方案注册应用程序,然后激活它。在应用程序内部,您必须处理OnActivated事件。

关于更多信息,这个MSDN页面和这个SO的回答可能会有所帮助。

最新更新