Suppose you want to create an application which you want to limit to a single running instance, like some image viewers do for example. Also, you need different users on a Terminal Server not to conflict with each other. Oh, and you’re coding in C#.
A possible solution to the problem is the one described in this Flawless Code post.
What I didn’t like is, it requires the 3.5 version of the framework, while I preferred to be able to run on machines with only 2.0 installed. So I’ve replaced the NamedPipeClientStream/NamedPipeServerStream with a P/Invoke-based implementation based on this example.
Also, I create a different pipe per user session, since I haven’t found a way to create a “local” pipe. An article at Dr Dobb’s suggests that it’s possible, while MSDN doesn’t mention this possibility…
I’ve zipped up my test solution in case someone else has the same needs.