如何处理来自 运行 作为 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