John
John

Reputation: 51

Console app to communicate with a windows service

we have a windows service running and we also have a console application that we use to configure this service, we also have an option to see some log being recorded.

The very ugly thing with this is that this communication is made by a text file, the console app writes to a text file and the service reads it and vice versa.

What would you use for this communication? TCP/IP is not an option because the console app will be used for the local running service only.

Windows API SendMessage should be the way to go?

thanks!

Upvotes: 5

Views: 1870

Answers (3)

John Knoeller
John Knoeller

Reputation: 34148

You run less risk of deadlocks if you use non-blocking methods of message passing. PostMessage, or SendNotifyMessage are better than SendMessage because they don't block the caller.

But they depend on the service having a window handle. Does it?

You can also use the WM_COPYDATA message, to pass more than just a wParam a lParam. If you use this message with PostMessage, you need to be careful not to free the memory until the receiver is done with it. It's safest to use SendMessage for WM_COPYDATA.

Upvotes: 1

t0mm13b
t0mm13b

Reputation: 34592

Shared Memory? See here for an article on Codeproject, here's another fastipc article on the same site. There's a blog entry detailing on how to use a memory mapped file for sharing via a wrapper.

Hope this helps, Best regards, Tom.

Upvotes: 0

Preet Sangha
Preet Sangha

Reputation: 65506

I would recommend WCF as the first thing to consider for all comms on windows if using .net as its built for this kind of thing and its relatively easy to use. Since you're excluding TCP, I'd suggest using the Named Pipes Binding.

There are also an number of windows comms apis available for intra-machine comms. Named Pipes (as mentioned), MailSlots, Shared Memory (Memory Mapped files) etc.

My suggestion would be be use Named Pipes either with WCF or natively.

Upvotes: 6

Related Questions