UWP 和非 UWP 应用程序之间的通信

Communication between UWP and Non UWP app

是否可以在 uwp 和非 uwp 应用程序之间进行通信。我的非 uwp 是提供服务的后台任务。我想在 uwp 应用程序中调用该非 uwp 服务。

如何拨打电话? AppServiceConnection class 在非 uwp 应用程序中可用吗?

是的,非 UWP 应用程序可以使用 AppServices 与 UWP 应用程序通信。

这里有一个示例: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/blob/master/Samples/AppServiceBridgeSample_C%2B%2B/cs/Win32Process_CPP/Win32Process_CPP.cpp

我想我有答案了。

首先,如果你想要像 UWP 一样易于设计的典型 win32 功能,你应该选择 WPF,它几乎使用相同的设计框架,但它可以支持 UWP 不支持的所有东西,传统的东西WPF 可以支持 Wndproc 循环和向其他应用程序发送消息。

现在,在 UWP 上实现跨应用程序通信的方法是从其名称中减去 U,如果您想继续使用它,它将不再通用。

在我深入了解这是为什么之前,我应该解释一下整个 Appservice 是如何工作的。

Appservice 是一种可以从其他应用程序调用的后台服务,它托管在 Backgroundhost.exe 下,因此这确保它在与应用程序不同的线程上运行,从而保留沙箱,正如我所说的那样由另一个应用程序启动,它很像程序中的 class/method,可以由外部的东西启动,您仍然可以用它们更改应用程序文件夹设置,以便让您的主应用程序知道在此通信中发生了什么。

因此,为了让其他应用程序访问此应用程序服务,他们必须知道它的地址,并且为了知道这一点,您必须自己对其进行硬编码并将其包含在您的文件夹中并启动它通过你的主APP上来,这只允许在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-store-apps

一种简单的方法是使用 WCF 服务或其他 RPC 框架(我使用 WAMP Sharp)创建 Windows 服务(但了解它们的局限性)并从 UWP 应用程序或 Win32 应用程序调用它。我认为这不是最佳做法,但对于我们的案例来说,它就像一个魅力。另外,不要忘记为 UWP 应用程序打开环回。

我推荐 stefanwick 的以下样本。它实际上分为 4 个部分,在代码和 windows 商店中包含详细信息和示例: https://stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1/