用于与Windows服务通信的控制台应用程序

时间:2010-01-29 00:13:24

标签: windows ipc

我们有一个运行的Windows服务,我们还有一个控制台应用程序,我们用它来配置这个服务,我们也有一个选项来查看记录的日志。

这个非常丑陋的事情是这个通信是由文本文件进行的,控制台应用程序写入文本文件,服务读取它,反之亦然。

你会用什么来进行这种交流? TCP / IP不是一个选项,因为控制台应用程序将仅用于本地运行服务。

Windows API SendMessage应该是要走的路?

谢谢!

3 个答案:

答案 0 :(得分:6)

如果使用.net作为内置的这种东西并且相对容易使用,我会建议WCF作为Windows上所有通信的第一件事。由于您要排除TCP,我建议使用Named Pipes Binding

还有一些Windows comms apis可用于机内通信。 Named Pipes(如上所述),MailSlotsShared Memory (Memory Mapped files)等。

我的建议是使用命名管道使用WCF或原生。

答案 1 :(得分:1)

如果使用非阻塞的消息传递方法,则会降低死锁风险。 PostMessageSendNotifyMessage优于SendMessage,因为它们不会阻止来电者。

但是他们依赖于具有窗口句柄的服务。是吗?

您还可以使用WM_COPYDATA消息,传递的不只是wParam和lParam。如果将此消息与PostMessage一起使用,则需要注意在接收器完成之前不要释放内存。使用SendMessage for WM_COPYDATA是最安全的。

答案 2 :(得分:0)

共享内存?有关Codeproject的文章,请参阅here,这是同一网站上的另一篇fastipc文章。有一篇博客文章详细介绍了如何使用memory mapped file通过包装器进行共享。

希望这有帮助, 最好的祝福, 汤姆。