C# 如何处理作为UWP运行的WPF应用程序中的文件激活?

C# 如何处理作为UWP运行的WPF应用程序中的文件激活?,c#,wpf,uwp,desktop-bridge,C#,Wpf,Uwp,Desktop Bridge,我有一个WPF应用程序,我想在其中处理文件激活。我找到了向注册表添加特定值来解决问题的解决方案。问题是最终的应用程序应该是一个UWP应用程序,我正在使用桌面网桥来实现这一点。如果应用程序以UWP运行,则无法访问注册表来设置这些特定值。有没有其他方法可以在不使用注册表的情况下处理文件激活 我还尝试创建一个UWP项目,因为在UWP中,处理文件激活非常容易,可以从这个项目启动WPF应用程序并传递文件内容 我尝试了Launcher.launchurisync(…),但没有找到一个构建URI的示例。如果这

我有一个
WPF
应用程序,我想在其中处理文件激活。我找到了向注册表添加特定值来解决问题的解决方案。问题是最终的应用程序应该是一个
UWP
应用程序,我正在使用桌面网桥来实现这一点。如果应用程序以
UWP
运行,则无法访问注册表来设置这些特定值。有没有其他方法可以在不使用注册表的情况下处理文件激活

我还尝试创建一个
UWP
项目,因为在UWP中,处理文件激活非常容易,可以从这个项目启动
WPF
应用程序并传递文件内容

我尝试了
Launcher.launchurisync(…)
,但没有找到一个构建URI的示例。如果这种方法可行,你能给我举个例子吗

然后我还尝试通过
Windows.ApplicationModel.AppService
进行通信,但如果应用程序没有运行,也需要启动它。所以这不是一个好办法


我也支持任何其他方法。

您可以实现自己的自定义
Main
方法,并检查调用
Launcher.launchurisync
API时传递给它的命令行参数的值

如果打包WPF应用程序并以Windows 10版本1809(build 17763)或更高版本为目标,则可以使用
AppInstance.GetActivatedEventTargets
方法获取实际的
IActivatedEventArgs
,并将其传递到UWP应用程序的
on激活的
方法:

[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;
        }
    }
}

有关更多详细信息,请参阅博客文章和随附内容。

是的,我已经可以在uwp项目中实现文件激活,这个线程上的问题是将文件内容传递给另一个appOne。我不清楚的是:因此,我有一个WPF项目,它将与桌面桥打包,包含此
Main()
method。然后我有一个处理文件激活的UWP项目。我收到的激活覆盖了
OnActivated()
方法以及如何从该方法启动WPF项目?我想我调用
启动器。launchurisync
,但是我应该传递什么类型的Uri作为参数?处理事件的是WPF应用程序。您有两个应用程序吗?UWP应用程序在哪里?如果打包的WPF应用程序处理Uri,可以使用
Launcher.launchurisync
就像激活UWP应用程序一样。解决方案中有两个项目。一个是我正在开发的应用程序(WPF)我应该创建一个UWP项目,以便能够注册文件激活。如果我能够在不使用第二个UWP项目的情况下解决问题,那就太好了。正如我从您的回答中了解到的,这是可能的…我刚才注意到,我错过了注册文件激活应该添加到打包项目中,而不是添加到另一个项目中…那里应为两个项目。要打包的WPF应用程序和引用WPF应用程序的Windows应用程序打包项目。无UWP应用程序。