检测Citrix XenDesktop会话



我想确定我们的应用程序是否在XenDesktop会话上运行而不是在本地运行。以下是我到目前为止发现的:


我们目前有代码来检测Citrix XenApp会话,类似于Helge Klein在"用于确定应用程序是否在Citrix或终端服务上运行的API"中提到的解决方案。

遗憾的是,在XenDesktop环境中的解决方案是返回0WTSClientProtocolType,这表示本地控制台会话。

在回答同样的问题时,Josh Weatherly提到检查sessionname环境变量。

然而,在XenDesktop环境中使用echo %sessionname%快速检查控制台返回' console '。

从"检测citrix "应用模式" ?"John sible提出了一个检测远程会话(不包括Citrix)的解决方案:

GetSystemMetrics(SM_REMOTESESSION)返回0,这也意味着它是一个本地会话。


有没有人知道一种方法来检测它是一个XenDesktop会话?到目前为止,您可以看到我所有的尝试都返回会话是本地控制台会话。

我使用的是XenDesktop Express 5.5,使用Citrix Receiver Web插件访问桌面

如果您为VDI使用XenDesktop,那么就应用程序而言,应用程序在本地执行。VDI,即虚拟桌面基础结构,包括将GUI从功能齐全的桌面操作系统交付到远程设备。通常,桌面O/S在数据中心管理程序上的虚拟机中执行,GUI使用Citrix的ICA堆栈传输到远程设备。例如,这发生在池桌面场景中。

XenApp提供虚拟桌面,这是一个稍微不同的概念。同样,桌面是使用ICA堆栈交付给远程设备的。但是,桌面不再运行在专用的O/S上。相反,它是单个Windows服务器上的许多用户会话之一。可能有任意数量的用户登录到该服务器。这限制了可以运行的应用程序,这就是为什么应用程序可能想知道它们在多用户O/s上。

您可能尝试做的是确定GUI是否正在使用ICA堆栈远程交付。一个简单的检查将包括查找"ProticaService",它负责实现ICA堆栈。

或者,您可以尝试确定您的机器是在VM中运行还是本机运行。除了第一段描述的共享场景外,XenDesktop还可以提供本机运行的桌面。这克服了CAD应用程序使用的图形卡等虚拟I/O设备的限制。在这种情况下,您需要排除VMM或管理程序的存在。

我已经更新了我的答案链接到与如何确定在XenDesktop会话远程协议类型的描述的问题。

您需要Citrix的WFAPI SDK中的WFGetActiveProtocol函数(没有很好地记录)。步骤如下:

  1. 下载SDK(链接)
  2. 安装WFApiSDK64-65.msi
  3. 在你的c++项目中包含wfapi.h和链接到wfapi[64].lib
  4. 使用未记录的函数WFGetActiveProtocol

相关内容

  • 没有找到相关文章

最新更新