繁体   English   中英

如何将字符串传递给UWP应用程序并从Windows窗体应用程序启动它

[英]How to pass string to UWP app and launch it from a Windows Forms app

官方MSDN文档描述了如何在通用Windows平台(UWP)应用程序之间共享数据。 但是我们可以从Windows窗体应用程序将字符串传递给UWP应用程序并从Windows窗体应用程序启动UWP应用程序吗? 我没有找到这种情况的任何文件。 我正在使用C#,但语言在这种情况下并不重要。

注意 :在我们的示例中,它是一个长字符串,其中包含Windows窗体应用程序要传递给使用该数据的UWP应用程序的数据。

最简单的方法是使用自定义URI方案,然后使用它启动应用程序。

注册和处理自定义URI在官方UWP文档中有详细描述,因此我建议您遵循这一点。 简而言之,首先在Package.appxmanifest注册自定义URI方案,然后覆盖App.xaml.csOnActivated ,并检查IActivatedEventArgs.Kind是否为ActivationKind.Protocol 然后,将IActivatedEventArgsProtocolActivatedEventArgs并使用其Uri属性访问已启动的URI。

在Windows窗体方面,您只需启动URI,这将导致UWP应用程序启动/激活。 您可以通过使用URI启动进程来执行此操作:

var url = "myapp:?someparam=somevalue";
var psi = new ProcessStartInfo();
psi.UseShellExecute = true;
psi.FileName = url; 
Process.Start(psi);

您可以使用URI通过在URI中使用查询字符串参数将任何string值传递给UWP应用程序。 您可以在UWP应用程序中阅读OnActivated方法中的那些。

当然,这不是唯一的解决方案,因为您现在也可以在Windows窗体中使用UWP API,因此您可以使用App Services在两个应用程序之间传递数据。 如果您只需要单向通信,那么自定义URI就是您的选择。

替代方法 - 应用程序执行别名

从构建16226开始,UWP支持App Execution Alias,它允许您声明一个系统范围的应用程序名称,该名称可用于从系统中的任何位置从命令行启动应用程序。 您可以在此博文中阅读更多相关信息。 这样,您可以直接通过其名称启动应用程序,并将参数作为进程参数传递。

除了@Martin Zikmund的答案; 本文解释了如何从命令行启动UWP应用程序,它基本上与Process.Start一样,但在脚本方案中可能更容易。 但是不适用于所有设备。

c:\> explorer.exe shell:appsFolder\put-your-PackageFamilyName-here!put-your-app-ID-here

查询字符串附录也应该有效。

如果您没有自己设置参数,请特别注意如何获取参数:

  1. 浏览到对应于PackageFamilyName的InstallLocation
  2. 打开AppxManifest.xml
  3. 为您想要的应用程序查找“Executable =”。 (由于某些应用程序包包含多个应用程序,此类邮件和日历属于同一个数据包)
  4. 在同一行,找到应用程序的ID

打开邮件应用程序的示例:

explorer.exe shell:appsFolder \\ microsoft.windowscommunicationsapps_8wekyb3d8bbwe!microsoft.windowslive.mail

而且, 另一个使用完整命令列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM