2010-07-09 2 views
9

Если мое приложение запускается, сначала проверяю, есть ли уже экземпляр приложения, и, если да, я даю фокус запущенному экземпляру и завершаю вновь созданный процесс. Я делаю это с именованным каналом, который зарегистрирован через WCF. Пока все работает.Изолированные именованные каналы в сеансах сервера терминалов

Теперь мое приложение также будет использоваться в среде сервера терминалов. Правильно ли, что именованные каналы являются системными, поэтому я должен изменить логику запуска, чтобы не фокусироваться на экземплярах других пользователей (что, конечно же, не будет работать, но сломать мое приложение), или Terminal Server (2003R2) изолирует WCF-Bindings для каждой сессии TS?

Я пока не могу получить доступ к продуктивной среде, поэтому я размещаю этот вопрос. Может, кто-то может дать мне ответ на этот вопрос?

Update

Через another post я по поводу запуска приложения, я узнал, что есть более удобный способ для управления одного запуска приложения с помощью мьютекс, который может быть использован для всей системы или на терминальной сессии основа.

Вопрос однако открыт в любом случае, и, возможно, кто-то, у которого есть хорошее WCF-знание, может ответить на него. Это было бы интересно.

ответ

8

Именованные трубы являются общесистемными. Не существует «Глобального» или «Локального» префикса, как и для других типов объектов ядра.

Это потому, что именованные каналы используются как часть сетевого ресурса, например, myComputer\pipename. Объекты, которые получают «Глобальные» и «Локальные» префиксы (события, семафоры, мьютексы, таймеры, сопоставления файлов и задания), привязаны к компьютеру и не могут быть доступны другому компьютеру.

1

В данной статье описывается, как ограничить именованные каналы для одного сеанса терминального сервера: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365600(v=vs.85).aspx

Для предотвращения удаленных пользователей или пользователей на другую сессии служб терминалов от доступа именованного канала, используйте SID входа на DACL для трубы. Идентификатор входа в систему используется также в качестве входа в систему; это SID, используемый для защиты пространства имен объектов за сеанс. Дополнительные сведения см. В разделе Получение идентификатора входа в систему на C++. https://msdn.microsoft.com/en-us/library/windows/desktop/aa446670(v=vs.85).aspx

Смежные вопросы