C#在同一台电脑内发送消息/命令



我有一个systemtray应用程序(C#,Windows窗体)。在这个可执行文件旁边,我将有另外x个可执行文件(用C#编写),它们必须以某种方式向系统托盘应用程序发送消息(最好是字符串格式)。

  • 我不想为此安装整个Windows服务
  • 它不是客户端服务器。这一切都发生在同一台电脑上。使用带有套接字的侦听器会很麻烦,我认为它甚至可能被自己的防火墙阻止
  • 我正在寻找一个类似控制台应用程序的东西,它可以处理它的主要功能上的参数。仅此一次用于已在运行的Windows窗体应用程序
  • 是否有可能在系统托盘应用程序中以某种方式创建一个可由其他可执行程序调用的全局函数/过程?比如"全局无效PerformAction(此处为params){..}"?这似乎是最好的解决方案,但我不确定.NET4是否支持这一点

示例:可执行文件X1.exe向系统托盘应用程序发送消息"执行操作[A]param[B]",然后终止自身。然后,系统托盘应用程序将读取该字符串,然后知道它需要用参数"B"调用函数A。

但是我该如何发送/接收信息呢?

谢谢。

在不使用WCF的情况下,您可以在命名管道上使用一个简单的包装器,就像我在回答另一个问题时发布的这个一样。

希望这能有所帮助!

对于本地通信,您可以尝试匿名管道。

链接:http://msdn.microsoft.com/en-us/library/bb546102.aspx

您还可以检查远程方法调用。这里有一个例子:

http://www.codeproject.com/Articles/14791/NET-Remoting-with-an-easy-example

有一种非常方便的方法可用于本机应用程序,即窗口消息。通过一些破解,你也可以将其与你的.net应用程序一起使用。

我建议你参考

SendMessage和SendMessageA api函数。不过,您可能需要编写一些不安全的代码。

如果使用自托管Asp.NetWebneneneba API,则可以使用对该应用程序的简单http调用来执行方法。这很好,因为您可以使用fiddler或任何可以发送http请求的东西来测试它。

这里有一个例子的链接。http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api

对我来说,最简单的解决方案似乎是使用WCF服务(在托盘应用程序中),正如Steve B所提到的。我使用了本教程:http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication.

我以前没有听说过管道,但我认为上面的链接使用了带有管道的WCF服务。它确实解决了我的问题。

感谢您提供的众多解决方案(而且速度如此之快)。

最新更新