2011-12-12 23 views
4

アプリケーションがローカルではなくXenDesktopセッションで実行されているかどうかを調べたいと考えています。Citrix XenDesktopセッションの検出


を我々は現在、「API for Determining if App is Running on Citrix or Terminal Services」にヘルゲ・クラインが言及した解決策に類似のCitrix XenAppのセッションを検出するためのコードを持っている:ここでは私がこれまでに発見したものです。

悲しいことに、XenDesktop環境のその解決策は、WTSClientProtocolType0を返しています。これは、ローカルコンソールセッションを意味します。

同じ質問に対する回答として、Josh Weatherlyがsessionname環境変数のチェックに言及しました。

ただし、XenDesktop環境でのecho %sessionname%のコンソールチェックで「コンソール」が返されます。

Detect citrix “application mode”?」からジョンSiblyは、リモートセッション(特にないCitrix社)を検出するためのソリューションを提案した:

GetSystemMetrics(SM_REMOTESESSION)、また、ローカルセッションであることを意味する0を返します。


誰もが、それはXenDesktopセッションであることを検出する方法を知っていますか?あなたが見ることができる限り、セッションはローカルコンソールセッションであるという返事を返しています。

私はXenDesktop Express 5.5を使用しており、Citrix Receiver Web Plug-Inを使用してデスクトップにアクセスしています。

答えて

4

XenDesktop for VDIを使用している場合、アプリケーションに関する限り、アプリケーションはローカルで実行するです。 VDI、または仮想デスクトップインフラストラクチャは、フル機能のデスクトップオペレーティングシステムからリモートデバイスにGUIを提供することから成ります。通常、デスクトップO/Sはデータセンター内のハイパーバイザ上の仮想マシンで実行され、GUIはCitrixのICAスタックを使用してリモートデバイスに送信されます。たとえば、これはプールされたデスクトップのシナリオで発生します。

XenAppは仮想デスクトップを提供しますが、これはやや異なる概念です。この場合も、デスクトップはICAスタックを使用してリモートデバイスに配信されます。ただし、デスクトップは専用O/Sで稼働しなくなりました。むしろ、単一のWindows Server上の多数のユーザーセッションの1つです。そのサーバーには、任意の数のユーザーがログオンしている可能性があります。これは、実行可能なアプリケーションに制限を設けます。そのため、アプリケーションがマルチユーザーO/S上にあることを知りたいことがあります。

GUIがICAスタックを使用してリモート配信されているかどうかを判断することを試みます。簡単なチェックでは、ICAスタックの実装を担当する「ProticaService」を探す必要があります。

また、マシンがVMで実行されているのか、マシンにネイティブであるのかを調べようとしている可能性があります。最初の段落で説明したプールされたシナリオのほかに、XenDesktopはネイティブで動作するデスクトップを提供できます。これにより、CADアプリケーションで使用されるグラフィックスカードなどの仮想I/Oデバイスの限界が克服されます。この場合、VMMまたはハイパーバイザーの存在を除外する必要があります。

+1

応答Donalに感謝します。最終的には、Citrixデスクトップサービス(WorkstationAgent)のProticaServiceの提案と同様の簡単なチェックを行いました。 – WillEllis

3

私はanswerを、XenDesktopセッションでリモートプロトコルの種類を特定する方法の説明にリンクして更新しました。

CitrixのWFAPI SDKのWFGetActiveProtocol機能が必要です。以下のように実行します。

  1. あなたのC++プロジェクトでWFApiSDK64-65.msi
  2. をインストール
  3. link)SDKをダウンロードはwfapi[64].lib
  4. wfapi.hとリンクが含まれ、文書化されていない機能にWFGetActiveProtocol

より詳細な情報を使用しますサンプルコードhere

関連する問題