是否可以在 uwp 和非 uwp 应用程序之间进行通信。我的非 uwp 是提供服务的后台任务。我想在 uwp 应用程序中调用该非 uwp 服务。
怎么打那个电话?AppServiceConnection 类在非 uwp 应用程序中可用吗?
是否可以在 uwp 和非 uwp 应用程序之间进行通信。我的非 uwp 是提供服务的后台任务。我想在 uwp 应用程序中调用该非 uwp 服务。
怎么打那个电话?AppServiceConnection 类在非 uwp 应用程序中可用吗?
是的,非 UWP 应用可以使用 AppServices 与 UWP 应用进行通信。
我推荐 stefanwick 的以下示例。它实际上是 4 个部分,其中包含代码和 Windows 商店中的详细信息和示例: https ://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1/
一种简单的方法是使用 WCF 服务或其他 RPC 框架(我使用 WAMP Sharp)创建 Windows 服务(但请阅读它们的限制)并从 UWP 应用程序或 Win32 应用程序调用它。我认为这不是最佳实践,但对我们而言,它就像一种魅力。另外,不要忘记为 UWP 应用打开环回。
我想我有你的答案。
首先,如果你想要像 UWP 一样易于设计的典型 win32 功能,你应该选择 WPF,它几乎使用相同的设计框架,但它可以支持 UWP 不支持的所有东西,传统的东西,如 Wndproc 循环和WPF 可以支持向其他应用程序发送消息。
现在,在 UWP 上获得跨应用程序通信的方法是通过将 U 从其名称中插入,如果您希望继续使用它,它将不再是通用的。
在深入了解为什么会这样之前,我应该解释一下整个 Appservice 是如何工作的。
Appservice 是一个可以从其他应用程序调用的后台服务,它托管在 Backgroundhost.exe 下,因此这可以确保它在与应用程序不同的线程上运行,从而保留沙盒,正如我所说的它可以由另一个应用程序启动,它的很多就像你的程序中的一个类/方法可以被外部的东西触发一样,你仍然可以用它们来改变 appfolder 的设置,这样你就可以让你的主应用程序知道在这个通信中发生了什么。
因此,为了让其他应用程序访问此应用程序服务,他们必须知道它的地址,并且为了知道这一点,您必须自己对其进行硬编码并将其包含在您的文件夹中,并通过您的主应用程序启动它,而这仅在 UWP 的桌面版本上允许,所以你看,无论如何使用 WPF 更好。
如果 windows 商店是您想要使用 UWP 的原因,那么请查看有关如何将传统的桌面应用程序迁移到 windows 商店的指南。 https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-root
此外,如果您对仅在 UWP 上支持的紧凑覆盖等闪亮的新 api 感兴趣,您不应该这样做,因为也有一些方法可以让它在普通桌面应用程序上工作。
UWP 应用与桌面应用通信的一种方法是使用命名管道。但由于 UWP 应用程序无法通过命名管道直接通信,因此您可以使用代理组件来实现此目的。您可以在此处获取有关如何创建代理组件的更多详细信息:https ://docs.microsoft.com/en-us/windows/uwp/winrt-components/brokered-windows-runtime-components-for-side-loaded-windows -商店应用