Mutex is the way to go. It is much less fragile than process names, etc.
However, you need to make sure that Mutex is not a garbage collection. In the case of a service (which is event driven, and does not have a “main” method that ends), the most sensible way to do this is probably to put it in a static variable.
Dispose of the mutexes when the service stops, so you don’t need to wait for completion or something like that.
Jon skeet
source share