如何处理来自 运行 作为 UWP 的 WPF 应用程序的文件激活?
How can I handle file activation from a WPF app which is running as UWP?
我有一个 WPF
应用程序,我想在其中处理文件激活。我找到了向注册表添加特定值可以解决问题的解决方案。问题是最终的应用程序应该是 UWP
应用程序,我正在使用桌面桥来执行此操作。如果应用程序 运行 为 UWP
,则它无法访问注册表来设置这些特定值。有没有其他方法可以在不使用注册表的情况下处理文件激活?
我还尝试创建一个 UWP
项目,因为在 UWP 中处理文件激活和从该项目以某种方式启动我的 WPF
应用程序并传递文件内容非常容易。
我尝试了 Launcher.LaunchUriAsync(...)
,但我还没有真正找到如何构建 URI 的示例。如果这种方式可行,你能举个例子吗?
然后我也尝试通过 Windows.ApplicationModel.AppService
进行通信,但如果不是 运行 也需要启动应用程序。所以这不是一个好方法。
我也愿意接受任何其他方法。
您可以实现自己的自定义 Main
方法并检查在调用 Launcher.LaunchUriAsync
API.[=18= 时传递给它的命令行参数的值]
如果打包 WPF 应用程序并以 Windows 10 版本 1809(内部版本 17763)或更高版本为目标,则可以使用 AppInstance.GetActivatedEventArgs
方法获取实际传递的 IActivatedEventArgs
进入 UWP 应用程序的 OnActivated
方法:
[STAThread]
static void Main()
{
App application = new App();
application.InitializeComponent();
application.OnActivated(Windows.ApplicationModel.AppInstance.GetActivatedEventArgs());
application.Run();
}
然后您可以在 WPF 应用程序中处理它:
public partial class App : Application
{
public void OnProtocolActivated(IActivatedEventArgs args)
{
switch (args.Kind)
{
case ActivationKind.File:
//handle file activation
break;
}
}
}
详情请参考this blog post and the accompanying code sample
我有一个 WPF
应用程序,我想在其中处理文件激活。我找到了向注册表添加特定值可以解决问题的解决方案。问题是最终的应用程序应该是 UWP
应用程序,我正在使用桌面桥来执行此操作。如果应用程序 运行 为 UWP
,则它无法访问注册表来设置这些特定值。有没有其他方法可以在不使用注册表的情况下处理文件激活?
我还尝试创建一个 UWP
项目,因为在 UWP 中处理文件激活和从该项目以某种方式启动我的 WPF
应用程序并传递文件内容非常容易。
我尝试了 Launcher.LaunchUriAsync(...)
,但我还没有真正找到如何构建 URI 的示例。如果这种方式可行,你能举个例子吗?
然后我也尝试通过 Windows.ApplicationModel.AppService
进行通信,但如果不是 运行 也需要启动应用程序。所以这不是一个好方法。
我也愿意接受任何其他方法。
您可以实现自己的自定义 Main
方法并检查在调用 Launcher.LaunchUriAsync
API.[=18= 时传递给它的命令行参数的值]
如果打包 WPF 应用程序并以 Windows 10 版本 1809(内部版本 17763)或更高版本为目标,则可以使用 AppInstance.GetActivatedEventArgs
方法获取实际传递的 IActivatedEventArgs
进入 UWP 应用程序的 OnActivated
方法:
[STAThread]
static void Main()
{
App application = new App();
application.InitializeComponent();
application.OnActivated(Windows.ApplicationModel.AppInstance.GetActivatedEventArgs());
application.Run();
}
然后您可以在 WPF 应用程序中处理它:
public partial class App : Application
{
public void OnProtocolActivated(IActivatedEventArgs args)
{
switch (args.Kind)
{
case ActivationKind.File:
//handle file activation
break;
}
}
}
详情请参考this blog post and the accompanying code sample