2

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

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

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

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

  • 如果用户关闭应用程序的 UI,有什么方法可以将 UWP 应用程序发送到后台模式执行而不是终止?以便应用程序可以像以前一样继续在后台模式下运行?
  • 或者有什么方法可以在 OnLaunched 事件中隐藏 UI(例如,我们的经典桌面应用程序将被打开,用户现在将无法再手动关闭 UWP 应用程序)?

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

问候, 多米尼克

4

1 回答 1

0

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

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

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

...

于 2017-07-19T08:50:14.890 回答