2017-10-04 84 views
3

UWP应用程序可以使用Extension Category="windows.protocol"MSDN)注册自定义方案。我知道自定义协议处理程序通过注册一个URI方案(MSDN),但这些总是启动应用程序的新实例。我想要的是一个UWP应用程序的行为:如果有一个当前正在运行的实例,它将被激活。是否有类似于UWP windows.protocol的桌面机制?

我还研究了URL Monikers和异步可插入协议(MSDN),但这些协议只在调用协议进程时才起作用,例如在使用Web视图时。即使其他进程(如Web浏览器)调用协议,UWP应用也会被激活。

这是用于C++ Win32桌面应用程序; .NET不是一个选项。

此外,正如我在对Anders提议的评论中所说的,我不想在创建一个单独的组件来激活正在运行的应用程序,而其他某个进程(如浏览器)调用我的协议时。 UWP应用程序没有这样的要求,我想为我的应用程序相同。

+0

这将有助于澄清你的问题,如果你删除了UWP引用,而是简洁地发布你以后的要求。 – IInspectable

+0

执行此操作的标准方法是让应用程序在启动期间检查现有实例,以及是否有一个将请求传递给旧实例并终止。每个人都这样做,不仅在协议处理程序方面。这样做没有问题。 – conio

回答

0

您可以实施IExecuteCommand,即Internet Explorer为其HTTP注册(DelegateExecute)所做的操作。您的实现可以简单地查找应用程序的现有实例并与之通信(如果有的话)或正常启动。

This blog post应该让你开始...

+0

我认为这并不比注册自定义协议处理程序更好,因为它还需要一个单独的组件,一个COM组件,它在单独的进程中执行,即shell。 UWP应用程序不需要任何其他组件。 –

+0

在您的应用程序中执行一个超出程序的COM服务器,但是,这样做是额外的工作。 – Anders

+0

@Anders:我一直认为“out-pro-proc”代表“o​​ut * process *”。不是吗?或者您是否使用包含多个进程的“应用程序”的广义定义? – conio

相关问题