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

nam*_*nam 3 c# winforms uwp

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

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

Mar*_*und 5

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

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

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

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

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

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

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

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