【问题标题】:Detecting a Citrix XenDesktop Session检测 Citrix XenDesktop 会话
【发布时间】:2011-12-12 16:31:44
【问题描述】:

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


我们目前拥有检测 Citrix XenApp 会话的代码,类似于 Helge Klein 在“API for Determining if App is Running on Citrix or Terminal Services”中提到的解决方案。

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

在回答 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 插件访问桌面。

【问题讨论】:

标签: session citrix terminal-services xendesktop


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢多纳尔的回复。最后,我们根据您的 ProticaService 建议对 Citrix Desktop Service (WorkstationAgent) 进行了类似的简单检查。
【解决方案2】:

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

您需要来自 Citrix 的 WFAPI SDK 的(没有很好记录的)函数 WFGetActiveProtocol。进行如下操作:

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

更多细节和示例代码here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多