检测 Citrix XenDesktop 会话

Wil*_*lis 5 session citrix terminal-services xendesktop

我想确定我们的应用程序是否在 XenDesktop 会话上运行,而不是在本地运行。这是我迄今为止发现的:


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

可悲的是在XenDesktop环境的解决方案正在恢复回来WTSClientProtocolType0这标志着本地控制台会话。

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

但是,echo %sessionname%在 XenDesktop 环境中进行快速控制台检查会返回“控制台”。

从“检测 citrix“应用程序模式”? ”约翰西伯里提出了一种检测远程会话的解决方案(特别是不是 Citrix):

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


有谁知道检测它是 XenDesktop 会话的方法吗?就您所见,我所有的尝试都返回会话是本地控制台会话。

我正在使用 XenDesktop Express 5.5,使用 Citrix Receiver Web 插件访问桌面。

Don*_*rty 4

如果您使用 XenDesktop 进行 VDI,则就应用程序而言,应用程序在本地执行。VDI(即虚拟桌面基础设施)包括将 GUI 从功能齐全的桌面操作系统交付到远程设备。通常,桌面操作系统在数据中心的虚拟机管理程序上的虚拟机中执行,并且使用 Citrix 的 ICA 堆栈将 GUI 传输到远程设备。例如,这种情况发生在池桌面场景中。

XenApp 提供虚拟桌面,这是一个略有不同的概念。同样,使用 ICA 堆栈将桌面传送到远程设备。但是,桌面不再在专用操作系统上运行。相反,它是单个 Windows Server 上的多个用户会话之一。可能有任意数量的用户登录到该服务器。这对可以运行的应用程序施加了限制,这就是应用程序可能想知道它们是否位于多用户操作系统上的原因。

您可能尝试做的是确定 GUI 是否是使用 ICA 堆栈远程交付的。一个简单的检查将涉及寻找“ProticaService”,它负责实现 ICA 堆栈。

或者,您可能会尝试确定您的计算机是在虚拟机中运行还是在计算机本机中运行。除了第一段中描述的池场景之外,XenDesktop 还可以提供本地运行的桌面。这克服了虚拟化 I/O 设备(例如 CAD 应用程序使用的显卡)的限制。在这种情况下,您需要排除 VMM 或虚拟机管理程序的存在。