views:

64

answers:

1

If my application starts, I check first if there is already an instance of the app and if yes, I give focus to the running instance and terminate the newly created process. I make this with a named pipe that is registered through WCF. That works fine so far.

Now my app will also be used in a terminal server environment. Is it right that named pipes are system wide, so that I must change the startup logic to not give focus to instances of other users (what certainly not will work but break my application) or does Terminal Server (2003R2) isolate WCF-Bindings for each TS-session?

I cannot access the productive environment yet, that’s why I post this question. Maybe someone can give me an answer to this question?

Update

Through another post I did concerning the app startup, I learned that there is a more convenient way to manage the single application startup using a Mutex, which can be used system wide or on a terminal session basis.

The question however is open anyhow and perhaps someone that has good WCF –knowledge can answer it. It would be interesting.

+1  A: 

Named pipes are system-wide. There is no "Global" or "Local" prefix like there is for other kernel object types.

This is because named pipes are used as part of a network resource, e.g., myComputer\pipename. The objects that get "Global" and "Local" prefixes (events, semaphores, mutexes, timers, file mappings, and jobs) are scoped to the computer and cannot be accessed by another computer.

Stephen Cleary