c# - 向/从两个正在运行的应用程序发送/接收消息

标签 c# message

我有两个应用程序,名为 SENDERRECEIVER

RECEIVER 将由 SENDER 使用 System.Diagnostics.Process.Start 方法启动

RECEIVER 将以隐藏模式启动,因此它没有 MainWindowHandle

然后我们可以使用 Win32.WM_COPYDATA 向 RECEIVER 发送消息,但是它需要 MainWindowHandle 所以我们不能。

我需要的是能够通过任何方法定期发送和接收消息。

我查看了以下链接以获取有关 MainWindowHandle 的手册,但没有帮助:

Send message to a Windows process (not its main window)

一个解决方案可能是来自 System.Diagnostics.Process 的对象,它可以帮助我们向进程发送消息。

最佳答案

在两个进程之间共享信息有不同的方式。

首先,当您的应用程序扩展时,您必须考虑这两个进程是否始终在同一台机器上。

不同的机器

  • 使用 TCP/UDP 套接字连接(可能是最快的解决方案)
  • 使用MSMQ
  • 使用 Web 服务、WCF 或 Restful Web 服务。
  • 从数据库中的公共(public)条目读取。 (不推荐)
  • 命名管道(检查 this )(命名管道可以在同一台机器上或通过网络传输)

始终在同一台机器上。

首选:MSMQ

如果我是你,我会保留在不同机器上拥有进程的能力,所以我会像 Maarten 所建议的那样使用两个使用 MSMQ 进行通信的 Windows 服务。为什么?

  1. MSMQ 让您不会丢失消息(万一 RECEIVER 宕机)
  2. MSMQ 允许您在同一台机器或不同机器上拥有进程
  3. Windows 服务使您能够轻松启动/停止进程
  4. Windows 服务可以监控我的 SNMP,通常它们可以轻松地与 Windows 管理工具集成。

第二首选:Restful Web Service

如果您不想使用 MSMQ,我会使用 IIS 中托管的两个 Restful Web 服务来与两个进程进行通信。如果您遇到 RECEIVER 对来自 SENDER 的迟到消息不感兴趣的情况,它会很有用。

关于c# - 向/从两个正在运行的应用程序发送/接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358841/

相关文章:

c++ - 如何从另一个窗口/程序发送/接收消息?

c# - 从 Python 调用 C# dll

c# - ComboBox 自动完成键/值对

java - 复合对象如何与父对象通信?

ios - 邮件和消息未从警报 View 中消失

php - 如何使用PHP处理向用户发送的站点反馈消息(成功/错误)?

c# - 继承的扩展?

c# - 大型 System.IO.MemoryStream 是否会导致我的应用程序的内存使用量急剧增加?

c# - 从 List<T> 中查找最大值

javascript - Parsely.js 覆盖默认验证消息