Обнаружение сеанса Citrix XenDesktop - PullRequest
4 голосов
/ 12 декабря 2011

Я пытаюсь определить, работает ли наше приложение в сеансе XenDesktop, а не локально.Вот что я нашел до сих пор:


В настоящее время у нас есть код для обнаружения сеанса Citrix XenApp, похожий на решение, упомянутое Хельге Кляйном в " API для определения, работает ли приложение на Citrixили Terminal Services".

К сожалению, это решение в среде XenDesktop возвращает обратно WTSClientProtocolType из 0, что означает сеанс локальной консоли.

В ответ на тот жеВопрос, о котором упоминал Джош Уэтерли, проверял переменную среды имени сессии.

Однако быстрая проверка консоли с помощью echo %sessionname% в среде XenDesktop возвращает обратно «Консоль».

Из « Определить citrix« режим приложения »? » предложил Джон Сиблирешение для обнаружения удаленного сеанса (в частности, не Citrix):

GetSystemMetrics(SM_REMOTESESSION) однако возвращает 0, что также означает, что это локальный сеанс.


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

Я использую XenDesktop Express 5.5, для доступа к рабочему столу с помощью Citrix Receiver Web Plug-In.

Ответы [ 2 ]

4 голосов
/ 17 января 2012

Если вы используете XenDesktop для VDI, то, что касается приложения, приложение выполняется локально. VDI, или инфраструктура виртуального рабочего стола, состоит из доставки графического интерфейса пользователя от полнофункциональной операционной системы настольного компьютера к удаленному устройству. Как правило, операционная система O / S выполняется на виртуальной машине на гипервизоре в центре обработки данных, а графический интерфейс пользователя передается на удаленное устройство с помощью стека ICA Citrix. Например, это происходит в сценарии с рабочими столами в пуле.

XenApp предлагает виртуальные рабочие столы, что является несколько иной концепцией. Опять же, рабочий стол доставляется на удаленное устройство с использованием стека ICA. Однако рабочий стол больше не работает на выделенной операционной системе. Скорее, это один из нескольких пользовательских сеансов на одном Windows Server. На этом сервере может быть любое количество пользователей. Это накладывает ограничения на приложения, которые могут быть запущены, поэтому приложения могут захотеть узнать, что они находятся на многопользовательском O / S.

Что вы можете попытаться сделать, это определить, доставляется ли GUI удаленно с использованием стека ICA. Простая проверка включает поиск «ProticaService», который отвечает за реализацию стека ICA.

В качестве альтернативы вы можете попытаться определить, работает ли ваша машина в виртуальной машине или является нативной для машины. Помимо объединенного сценария, описанного в первом абзаце, XenDesktop может предоставить рабочий стол, работающий без поддержки. Это преодолевает ограничения на виртуальные устройства ввода-вывода, такие как графические карты, используемые приложениями САПР. В этом случае вам необходимо исключить наличие VMM или гипервизора.

3 голосов
/ 06 августа 2014

Я обновил свой ответ , связанный с вопросом, с описанием того, как определить тип протокола удаленного взаимодействия в сеансах XenDesktop.

Вам нужна (не очень хорошо документированная) функция WFGetActiveProtocol из Citrix 'WFAPI SDK. Действуйте следующим образом:

  1. Скачать SDK ( ссылка )
  2. Установить WFApiSDK64-65.msi
  3. В вашем C ++ проекте включите wfapi.h и ссылку на wfapi[64].lib
  4. Использовать недокументированную функцию WFGetActiveProtocol

Подробнее и пример кода здесь .

...