0

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

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

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

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

谢谢你。

4

5 回答 5

1

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

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

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

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

于 2012-09-06T13:57:30.447 回答
1

不求助于 WCF - 您可以在命名管道上使用简单的包装器- 就像我发布的这个作为另一个问题的答案一样。

希望这可以帮助!

于 2012-09-06T13:33:56.987 回答
0

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

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

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

于 2012-09-06T17:01:18.557 回答
0

本机应用程序有一个非常方便的方法,即窗口消息。通过一些 hack,您还可以将它与您的 .net 应用程序一起使用。

我建议你参考

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

于 2012-09-06T13:35:34.637 回答
0

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

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

于 2012-09-06T13:46:40.627 回答