Pipes are streams. Writing data into a pipe which has data pending a read shouldn't overwrite anything, unless you filled the send buffer.
Your service and EXE2 should keep an eye on the pipe and read data out of it regularly. A service is spending most of its time sitting there awaiting requests anyway, so you should be able to use the normal asynchronous stream reading (e.g.
Stream.BeginRead[
^] or the new .Net 4.5
ReadAsync[
^]).