UWP App与Windows服务的通信

use*_*214 6 windows-services signalr uwp desktop-bridge

我们正在修复重新构建应用程序,并且正在讨论是否可以使用UWP而不是普通的WPF应用程序.

我们的应用程序需要能够访问整个文件系统和所有系统资源.这是一个问题,因为UWP应用程序是沙箱.但是,我们试图通过尝试以这种方式处理它来绕过该问题:

  • Windows服务 - >始终在系统上运行.这将在访问和修改系统资源时承载核心功能.

  • UWP应用程序 - >由于UWP是沙盒,UWP应用程序会将所有系统请求转发到Windows服务,这将完成所有主要工作并返回输出.

我们可以简单地在WPF中执行此操作,但我们希望使用UWP以利用WPF缺少的一些新的Windows 10核心功能,例如live tiles和Cortana.

你认为我们的方法是否可行?我们的一个不确定因素是我们如何让UWP应用程序与Windows服务进行通信 - 我们已经研究过SignalR和Desktop Bridge这样的东西,但不确定哪种方法可能是我们方案的最佳方法.

谢谢!

Gra*_*eng 4

您认为我们的做法可行吗?

我们无法直接在 UWP 应用程序中使用 Windows 服务。为了在 Win32 应用程序和 UWP 应用程序之间建立 IPC,这里可能有帮助的是使用新的 Capability <rescap:Capability Name="runFullTrust" />,它使由 API 启动的 Win32 应用程序FullTrustProcessLauncher能够实现上层应用程序安全上下文以使用 WinRT API。但正如您在rescap此处看到的那样,这意味着此 UWP 应用程序无法在商店中发布。

您可以参考官方的AppService Bridge Sample。您可以尝试首先创建一个使用应用程序服务(可以与WPF和UWP应用程序通信,而不是传统Windows服务)并使用WinRT API的传统桌面应用程序,在构建此应用程序(不要运行它)后,生成一个.exe文件将被生成。但此应用程序无法运行,因为它使用 WinRT API,那么您可以创建 UWP 应用程序以使此桌面应用程序可执行。

我们已经研究了 SignalR 和 Desktop Bridge 之类的东西,但不确定哪种方法可能是适合我们场景的最佳方法。

所以我认为桌面桥可能是最好的方法。

  • 据我所知,AppServices 的问题是它无法触发事件。您只能从 UWP 调用它,这让我回到原来的问题,即 UWP 应用程序应该位于前台或使用后台进程,该进程的最短时间触发时间为 15 分钟。我创建 Windows 服务的首要目的就是克服这个限制。你能建议解决这个问题吗 (2认同)