我希望确定我们的应用程序是否在XenDesktop会话上运行,而不是在本地运行。以下是我到目前为止所发现的:
我们目前有代码来检测Citrix XenApp会话,类似于Helge "用于确定App是否在Citrix或终端服务上运行的API“中提到的解决方案。
可悲的是,XenDesktop环境中的解决方案正在返回一个WTSClientProtocolType of 0,这意味着一个本地控制台会话。
在回答相同的问题时,Josh Weatherly提到了检查sessionname环境变量。
但是,在echo %sessionname%环境中使用XenDesktop快速检查控制台会返回' console‘。
"检测citrix“应用模式”?“约翰·西里提出了一种检测远程会话的解决方案(特别是Citrix ):
然而,GetSystemMetrics(SM_REMOTESESSION)返回0,这也意味着它是一个本地会话。
有谁知道检测它是XenDesktop会话的方法吗?据您所见,我的所有尝试都在返回,即会话是本地控制台会话。
我正在使用XenDesktop速成5.5,使用插件访问桌面。
发布于 2012-01-17 14:06:53
如果您对VDI使用XenDesktop,那么就应用程序而言,应用程序是在本地执行的。VDI,即虚拟桌面基础结构,包括将GUI从功能齐全的桌面操作系统传递到远程设备。通常,桌面O/S在数据中心管理程序上的虚拟机中执行,GUI使用Citrix的ICA堆栈传输到远程设备。例如,这种情况发生在池桌面场景中。
XenApp提供虚拟桌面,这是一个稍微不同的概念。同样,使用ICA堆栈将桌面传送到远程设备。但是,桌面不再运行在专用的O/S上,而是单个Windows Server上的多个用户会话之一。可能有任意数量的用户登录到该服务器。这就限制了可以运行的应用程序,这就是为什么应用程序可能想知道它们在多用户O/S上。
您可能要做的是确定GUI是否正在使用ICA堆栈远程交付。一个简单的检查将涉及寻找"ProticaService",它负责实现ICA堆栈。
或者,您可能试图确定您的计算机是在VM中运行还是在机器上运行。除了第一段中描述的池式场景之外,XenDesktop还可以交付运行本机的桌面。这克服了对虚拟I/O设备的限制,例如CAD应用程序使用的图形卡。在这种情况下,您需要排除VMM或hypervisor的存在。
https://stackoverflow.com/questions/8477506
复制相似问题