【问题标题】:UWP App Communication with Windows ServiceUWP 应用与 Windows 服务的通信
【发布时间】:2016-11-10 20:23:31
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: uwp windows-services signalr desktop-bridge


    【解决方案1】:

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

    我们不能直接在 UWP 应用中使用 Windows 服务。为了在 Win32 应用程序和 UWP 应用程序之间建立 IPC,这里可能有帮助的是使用新的 Capability <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 之类的东西,但不确定哪种方法最适合我们的场景。

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

    【讨论】:

    • AppServices 的问题是,据我所知,它无法触发事件。您只能从 UWP 调用它,这让我回到原来的问题,即 UWP 应用程序应该在前台或使用限制为 15 分钟最短时间触发的后台进程。我首先创建 Windows 服务的目的是为了克服这个限制。您能否提出解决此问题的方法
    【解决方案2】:

    您可以查看我的示例代码: 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/

    【讨论】:

    • 你能解释一下这些项目吗?就像您在 VS 中选择的用于开发该解决方案的步骤和项目类型一样?
    【解决方案3】:

    我刚刚通过共享内存在 UWP 和 .Net Framework Windows 服务之间创建了一个 IPC 库。无需使用完全信任功能或配置网络环回规则。创建共享对象时,只需显式设置访问规则并将您的 UWP 应用添加到 ACL,它将能够打开由 Windows Service 创建的全局命名的 Mutex/Semaphore/Event 和内存映射文件。

    GitHub repository with source code, tools and samples

    Nuget package

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多