桌面 PC 上带有本机消息传递的 MS Edge 扩展 - 运行 UWP 应用程序在后台/无 UI

MS Edge Extension with Native Messaging on Desktop PC - Run UWP App in Background / no UI

我们在 Windows 上有一个经典的桌面应用程序,它需要与网络浏览器通信。 因此,我们创建了 Web 浏览器扩展,并使用本机消息传递技术在网页上的 JavaScript 和本机桌面应用程序之间传递消息。 Google Chrome、Mozilla Firefox 和 Opera 目前支持这种通信方式。 现在我们要在 Microsoft Edge 中执行相同的任务。 但不幸的是,Microsoft Edge 以与其他浏览器不同的方式支持本地消息传递。 在 Chrome/Firefox/Opera 中,只需将序列化的 JSON 字符串通过 stdin/stdout.

传递给本地消息传递主机应用程序

由于 Microsoft Edge 是一个通用 Windows 平台应用程序,它仅支持通过 AppService 与另一个 UWP 应用程序通信(并进一步通过 FullTrustProcess 与我们的经典桌面应用程序通信)。 由于多种原因,我们的经典桌面应用无法转换为 UWP 应用。 基本上这没问题,但是有一些问题我目前不知道如何解决:

UWP 应用程序似乎需要用户界面。但是扩展的目的只是交流,没有 UI 的意图。

所以我可以在用户打开 UWP 应用程序时显示有关 UWP 应用程序/边缘扩展的一些信息,但如果用户关闭应用程序(例如通过单击 (X) 按钮),UWP 应用程序进程将被终止由系统。如果在通信过程中发生这种情况,则本机消息通信将中断,用户将收到错误消息。 到目前为止,我还没有找到避免这种情况的方法。 当 Microsoft Edge 启动 UWP 应用程序(由 "runtime.connectNative" 在扩展的后台 JavaScript 代码中启动)时,它在后台模式下运行,并且如果 Microsoft Edge 退出则终止,这是正常的。 但是,如果用户打开应用程序(例如通过开始菜单),应用程序的进程将被重用,并且现在 运行 处于前台模式。然后,如果应用 UI 被用户关闭,最初由 Microsoft Edge 启动的进程将终止。 我查看了 Microsoft 的官方 "ExtendedExecution" 示例,但它的行为方式相同。

可能我可以从我们的本机桌面应用程序中找到 UWP 应用程序的 HWND 并用它执行一些丑陋的黑客攻击,但我绝对想避免这种情况。

此致, 多米尼克

uwp中有后台任务https://docs.microsoft.com/en-us/windows/uwp/launch-resume/support-your-app-with-background-tasks

此外,您会对 package.appxmanifest 文件中的此设置 'AppListEntry' 感兴趣。有了它,您的应用程序 link 将不会出现在开始菜单中

<Applications>
    <Application Id="id" Executable="$targetnametoken$.exe" EntryPoint="entrypoint.App">
      <uap:VisualElements AppListEntry="none" .../>

...