Обнаружение сеанса Citrix XenDesktop

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


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

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

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

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

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

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


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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам