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

用于与windows服务通信的控制台应用程序,windows,ipc,Windows,Ipc,我们有一个windows服务正在运行,我们还有一个控制台应用程序,我们用它来配置这个服务,我们还有一个选项来查看一些正在记录的日志 最糟糕的是,这种通信是通过文本文件进行的,控制台应用程序写入文本文件,服务读取文本文件,反之亦然 你会用什么来交流?TCP/IP不是选项,因为console应用程序将仅用于本地运行的服务 Windows API SendMessage应该怎么做 谢谢 > P>我建议WCF是所有Windows上的第一个要考虑的事项,如果使用.NET作为这种类型的构建,并且它相对容易使

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

最糟糕的是,这种通信是通过文本文件进行的,控制台应用程序写入文本文件,服务读取文本文件,反之亦然

你会用什么来交流?TCP/IP不是选项,因为console应用程序将仅用于本地运行的服务

Windows API SendMessage应该怎么做


谢谢

> P>我建议WCF是所有Windows上的第一个要考虑的事项,如果使用.NET作为这种类型的构建,并且它相对容易使用。由于您排除了TCP,我建议使用

还有许多windows comms API可用于机器内通信。(如前所述)等

我的建议是将命名管道与WCF或本机一起使用。

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

希望这有帮助, 顺致敬意,
Tom.

如果使用非阻塞的消息传递方法,死锁的风险更小
PostMessage
SendNotifyMessage
优于
SendMessage
,因为它们不会阻止调用者

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


您还可以使用该消息将不仅仅是一个wParam传递给一个lParam。如果将此消息与PostMessage一起使用,则需要小心,在接收者处理完之前不要释放内存。对WM_COPYDATA使用SendMessage是最安全的

+1-我不确定OP在编码时使用了什么,但我在过去使用WM_COPYDATA PostMessage在进程之间进行通信。如果内存分配正确,则设置它,以便接收方在接收消息时释放内存。这将使其异步。请注意,
PostMessage
方法在Vista和以后的某些情况下由于会话0隔离而失败-请参阅例如。