5

アプリケーションがローカルではなくXenDesktopセッションで実行されているかどうかを確認しようとしています。これが私がこれまでに見つけたものです:


現在、HelgeKleinが「アプリがCitrixまたはターミナルサービスで実行されているかどうかを判断するためのAPI」で説明したソリューションと同様のCitrixXenAppセッションを検出するコードがあります。

残念ながら、XenDesktop環境でのそのソリューションは、ローカルコンソールセッションを意味するaWTSClientProtocolTypeを返しています。0

同じ質問に答えて、JoshWeatherlyはsessionname環境変数のチェックについて言及しました。

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

Detectcitrix「applicationmode」?」からJohn Siblyは、リモートセッション(特にCitrixではない)を検出するためのソリューションを提案しました。

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


XenDesktopセッションであることを検出する方法を知っている人はいますか?あなたが見ることができる限り、私の試みはすべて、セッションがローカルコンソールセッションであるということを返しています。

XenDesktop Express 5.5を使用しており、CitrixReceiverWebプラグインを使用してデスクトップにアクセスしています。

4

2 に答える 2

4

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

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

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

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

于 2012-01-17T14:06:53.230 に答える
3

質問にリンクされている回答を、XenDesktopセッションでリモートプロトコルタイプを判別する方法の説明で更新しました。

WFGetActiveProtocolCitrixのWFAPISDKの(十分に文書化されていない)関数が必要です。次のように実行します。

  1. SDKをダウンロードします(リンク
  2. インストールWFApiSDK64-65.msi
  3. C ++プロジェクトにインクルードwfapi.hし、リンクしますwfapi[64].lib
  4. 文書化されていない関数を使用するWFGetActiveProtocol

詳細とサンプルコードはこちら

于 2014-08-06T18:18:19.963 に答える