繁体   English   中英

UWP 应用程序与 Windows 服务的通信

[英]UWP App Communication with Windows Service

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

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

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

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

我们可以在 WPF 中简单地做到这一点,但我们希望使用 UWP 来利用 WPF 缺少的一些新的 Windows 10 核心功能,例如动态磁贴和 Cortana。

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

谢谢!

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

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

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

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

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

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

我认为 WCF 是正确的答案。

对于双工绑定,请检查这个: https : //github.com/manupstairs/UWPwithDuplexWCF

向 MS Store 提交一个 APPX 又近了一步。 你需要桌面桥技术。 控制台中的 UWP UI 部分和 WCF 服务宿主。 我们可以将它们组合成一个 APPX。

能力“runFullTrust”是必要的。 https://developer.microsoft.com/en-us/windows/bridges/desktop/

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

包含源代码、工具和示例的 GitHub 存储库

Nuget 包

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM