首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测Citrix XenDesktop会话

检测Citrix XenDesktop会话
EN

Stack Overflow用户
提问于 2011-12-12 16:31:44
回答 2查看 5.8K关注 0票数 5

我希望确定我们的应用程序是否在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,使用插件访问桌面。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的存在。

票数 4
EN

Stack Overflow用户

发布于 2014-08-06 18:18:19

我已经更新了问题中链接到的回答,并描述了如何确定XenDesktop会话中的远程处理协议类型。

您需要Citrix的WFAPI中的函数WFGetActiveProtocol (没有很好的文档说明)。按以下方式进行:

  1. 下载SDK (链接)
  2. 安装WFApiSDK64-65.msi
  3. 在您的C++项目中包括wfapi.hwfapi[64].lib链接
  4. 使用未文档化的函数WFGetActiveProtocol

更多细节和示例代码这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8477506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档