Изолированные именованные каналы в сеансах сервера терминалов - PullRequest
9 голосов
/ 09 июля 2010

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

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

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

Обновление

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

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

Ответы [ 2 ]

8 голосов
/ 09 июля 2010

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

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

1 голос
/ 25 мая 2017

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

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

...