2010-07-09 9 views
9

Wenn meine Anwendung gestartet wird, überprüfe ich zuerst, ob es bereits eine Instanz der App gibt und wenn ja, gebe ich den Fokus auf die laufende Instanz und beende den neu erstellten Prozess. Ich mache dies mit einer Named Pipe, die über WCF registriert ist. Das funktioniert soweit.Isolierte Named Pipes in Terminalserver-Sitzungen

Jetzt wird meine App auch in einer Terminal-Server-Umgebung verwendet. Ist es richtig, dass named pipes systemweit sind, so dass ich die Startlogik ändern muss, um den Instanzen anderer Benutzer keinen Fokus zu geben (was sicherlich nicht funktioniert, aber meine Anwendung bricht) oder isoliert Terminal Server (2003R2) WCF-Bindings jede TS-Sitzung?

Ich kann noch nicht auf die produktive Umgebung zugreifen, deshalb poste ich diese Frage. Vielleicht kann mir jemand eine Antwort auf diese Frage geben?

aktualisieren

Durch another post ich die app Startup hatte über, erfuhr ich, dass es ein bequemer Weg, um den einzelnen Anwendungsstart mit einem Mutex, zu verwalten, die systemweit oder auf einer Terminal-Sitzung verwendet werden kann, Basis.

Die Frage ist aber sowieso offen und vielleicht kann jemand, der gute WCF-Kenntnisse hat, darauf antworten. Es wäre interessant.

Antwort

8

Named Pipes sind systemweit. Es gibt kein Präfix "Global" oder "Local" wie für andere Kernel-Objekttypen.

Dies liegt daran, dass Named Pipes als Teil einer Netzwerkressource verwendet werden, z. B. myComputer\pipename. Die Objekte, die "globale" und "lokale" Präfixe erhalten (Ereignisse, Semaphore, Mutexe, Timer, Dateizuordnungen und Jobs) sind auf den Computer beschränkt und können nicht von einem anderen Computer aus aufgerufen werden.

1

Dieser Artikel beschreibt, wie Named Pipes zu einer einzigen Sitzung des Terminal-Servers beschränken: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365600(v=vs.85).aspx

Um Remote-Benutzer oder Benutzer auf einer anderen Terminal-Services-Session vom Zugriff auf eine Named Pipe, verwenden Sie den Anmelde SID auf dem verhindern DACL für das Rohr. Die Anmeldungs-SID wird auch in Run-as-Anmeldungen verwendet. Es ist die SID, die zum Schützen des Namespaces pro Sitzungsobjekt verwendet wird. Weitere Informationen finden Sie unter Abrufen der Anmeldungs-SID in C++. https://msdn.microsoft.com/en-us/library/windows/desktop/aa446670(v=vs.85).aspx