我希望确定我们的应用程序是在XenDesktop会话上运行而不是在本地运行。这是我到目前为止所发现的:
我们目前有代码来检测Citrix XenApp会话,类似于Helge Klein在" API for Determining if App is Running on Citrix or Terminal Services"中提到的解决方案。
遗憾的是,XenDesktop环境中的解决方案返回WTSClientProtocolType
0
,表示本地控制台会话。
在回答同样的问题时,Josh Weatherly提到了检查sessionname环境变量。
但是,在XenDesktop环境中使用echo %sessionname%
进行快速控制台检查会返回'控制台'。
来自" Detect citrix “application mode”?" John Sibly提出了一种检测远程会话的解决方案(特别是Citrix):
然而, GetSystemMetrics(SM_REMOTESESSION)
返回0,这也意味着它是本地会话。
有没有人知道检测它是XenDesktop会话的方法?到目前为止,您可以看到我的所有尝试都返回,该会话是本地控制台会话。
我使用XenDesktop Express 5.5,使用Citrix Receiver Web插件访问桌面。
答案 0 :(得分:4)
如果您使用的是XenDesktop for VDI,那么就应用程序而言,应用程序 在本地执行。 VDI或虚拟桌面基础架构包括将GUI从全功能桌面操作系统提供给远程设备。通常,桌面O / S在数据中心中的管理程序上的虚拟机中执行,并且使用Citrix的ICA堆栈将GUI发送到远程设备。例如,这发生在池桌面场景中。
XenApp提供虚拟桌面,这是一个略有不同的概念。同样,桌面使用ICA堆栈传送到远程设备。但是,桌面不再在专用操作系统上运行。相反,它是单个Windows Server上的许多用户会话之一。可能有任意数量的用户登录到该服务器。这限制了可以运行的应用程序,这就是应用程序可能想要知道它们位于多用户操作系统上的原因。
您可能尝试做的是确定是否使用ICA堆栈远程传送GUI。一个简单的检查将涉及寻找“ProticaService”,它负责实现ICA堆栈。
或者,您可能正在尝试确定您的计算机是在VM中运行还是在计算机本机上运行。除了第一段中描述的池化场景外,XenDesktop还可以提供桌面运行本机。这克服了虚拟化I / O设备的限制,例如CAD应用程序使用的图形卡。在这种情况下,您需要排除VMM或虚拟机管理程序的存在。
答案 1 :(得分:3)