【问题标题】:Is there a desktop mechanism similar to UWP windows.protocol?有没有类似于 UWP windows.protocol 的桌面机制?
【发布时间】:2018-03-16 05:04:31
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这将有助于澄清您的问题,如果您删除了 UWP 引用,而是简洁地发布了您所追求的要求。
  • 执行此操作的标准方法是让应用程序在启动期间检查现有实例,如果有一个将请求传递给旧实例并终止。每个人都这样做,不仅在协议处理程序方面。这样做没有问题。

标签: c++ windows winapi


【解决方案1】:

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

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

【讨论】:

  • 我认为这并不比注册一个自定义协议处理程序更好,因为它还需要一个单独的组件,一个 COM 组件,它在一个单独的进程中执行,即 shell。 UWP 应用不需要任何额外的组件。
  • 一个进程外 COM 服务器在您的应用程序中执行,但是是的,这样做是额外的工作。
  • @Anders:我一直认为“out-of-proc”代表“o​​ut of process”。不是吗?还是您使用包含多个进程的“应用程序”的广义定义?
  • 当其他进程调用你的协议时它会创建多个进程,但这是不可避免的(除非你的应用程序第一次没有运行)。但是,它不会在 shell 中运行,它会在您的应用程序 .exe 的另一个实例中运行,当它处于进程外时。
猜你喜欢
  • 2021-09-24
  • 2021-05-12
  • 1970-01-01
  • 2021-04-16
  • 2017-11-20
  • 2019-11-20
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多