C#在同一台PC上发送消息/命令

时间:2012-09-06 13:07:17

标签: c#

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

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

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

但我如何发送/接收消息?

谢谢。

5 个答案:

答案 0 :(得分:1)

不使用WCF - 你可以在Named Pipes上使用一个简单的包装 - 就像this我发布的另一个问题的答案。

希望这有帮助!

答案 1 :(得分:1)

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

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

您还可以查看远程方法调用。 这是一个例子:

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

答案 2 :(得分:0)

本机应用程序有一种非常方便的方法,即窗口消息。有了一些hack,你也可以在.net应用程序中使用它。

我建议你参考

SendMessage和SendMessageA api函数。你可能不得不写一些不安全的代码。

答案 3 :(得分:0)

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

以下是一个示例链接。 http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api

答案 4 :(得分:0)

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

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

感谢您提供的许多解决方案(以及如此之快)。