2011-12-12 78 views
4

我正在尋求確定我們的應用程序是否在XenDesktop會話上運行,而不是在本地運行。以下是我迄今發現:檢測Citrix XenDesktop會話


我們目前擁有的代碼來檢測類似於赫爾格·克萊因在「API for Determining if App is Running on Citrix or Terminal Services」中提到的解決方案思傑的XenApp會話。

令人遺憾的是,XenDesktop環境中的解決方案正在返回表示本地控制檯會話的0WTSClientProtocolType

爲了迴應同樣的問題Josh Weatherly提到檢查sessionname環境變量。

但是,在XenDesktop環境中使用echo %sessionname%進行快速控制檯檢查會返回'控制檯'。

從「Detect citrix 「application mode」?」約翰Sibly提出瞭解決,用於檢測遠程會話(未的Citrix特別):

GetSystemMetrics(SM_REMOTESESSION)然而返回0這也意味着它是一個局部會話。


有誰知道一種方法來檢測它是一個XenDesktop會話嗎?只要你能看到我的所有嘗試都返回,那麼這個會話就是一個本地控制檯會話。

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

回答

4

如果您正在使用XenDesktop for VDI,則就應用程序而言,應用程序在本地執行。 VDI或虛擬桌面基礎架構由將全功能桌面操作系統的GUI提供給遠程設備組成。通常,桌面操作系統在數據中心的管理程序中的虛擬機中執行,並且使用Citrix的ICA堆棧將GUI傳輸到遠程設備。例如,這發生在池桌面場景中。

XenApp提供虛擬桌面,這是一個稍微不同的概念。同樣,桌面使用ICA堆棧傳送到遠程設備。但是,桌面不再運行在專用操作系統上。相反,它是單個Windows Server上的多個用戶會話之一。可能有任何數量的用戶登錄到該服務器。這限制了可運行的應用程序,這就是爲什麼應用程序可能想知道它們在多用戶操作系統上。

您可能會嘗試做的是確定GUI是否使用ICA堆棧遠程傳送。一個簡單的檢查將涉及尋找負責實施ICA堆棧的「ProticaService」。

或者,您可能試圖確定您的計算機是在VM中運行還是在本機上運行。除了第一段描述的池場景外,XenDesktop還可以提供運行本地桌面的桌面。這克服了虛擬I/O設備(如CAD應用程序使用的圖形卡)的限制。在這種情況下,您需要排除VMM或虛擬機管理程序的存在。

+1

感謝Donal的迴應。最後,我們對Citrix Desktop Service(WorkstationAgent)做了一個類似的簡單檢查,針對您的ProticaService建議。 – WillEllis

3

我已經更新了與問題中鏈接到的answer關於如何在XenDesktop會話中確定遠程協議類型的說明。

您需要Citrix的WFAPI SDK的功能WFGetActiveProtocol(沒有很好的記錄)。步驟如下:

  1. 下載的SDK(link
  2. 安裝WFApiSDK64-65.msi
  3. 在你的C++項目包括:wfapi.h,並鏈接到wfapi[64].lib
  4. 使用無證功能WFGetActiveProtocol

更多細節和示例代碼here