UWP App与Windows服务的通信

时间:2016-11-10 20:23:32

标签: uwp windows-services signalr project-centennial desktop-bridge

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

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

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

  • UWP应用程序 - >由于UWP是沙盒,因此UWP应用程序会将所有系统请求转发到Windows服务,这将完成所有操作 首当其冲,只返回输出。

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

  

您认为我们的方法是否可行?

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

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

  

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

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

答案 1 :(得分:0)

您可以检查我的示例代码: https://github.com/manupstairs/UWPWithWCFSample

我认为WCF是正确的答案。

对于双面绑定,请检查以下一项: https://github.com/manupstairs/UWPwithDuplexWCF

更近一步,可以向MS Store提交一个APPX。您需要Desktopbridge技术。 UWP UI部分和WCF服务托管在控制台中。我们可以将它们组合成一个APPX。

必须具有“ runFullTrust”功能。 https://developer.microsoft.com/en-us/windows/bridges/desktop/

答案 2 :(得分:0)

我刚刚通过共享内存为 UWP 和 .Net Framework Windows 服务之间的 IPC 创建了一个库。无需使用完全信任功能或配置网络环回规则。创建共享对象时,只需明确设置访问规则并将您的 UWP 应用添加到 ACL,它就可以打开 Windows 服务创建的全局命名互斥/信号量/事件和内存映射文件。

GitHub repository with source code, tools and samples

Nuget package