API für die Bestimmung, wenn App Läuft auf Citrix oder Terminal Services
Ich bin auf der Suche nach einer API-Funktion, die ich anrufen kann, um zu bestimmen, wenn die software ausgeführt wird, auf Citrix, Terminal Services, oder ein stand-alone-PC. Optimal wäre es Arbeit, so etwas wie dieses:
Select Case APIWhatSystem.Type.ToString
Case "Citrix"
bCitrix = True
Case "TS"
bTerminalServices = True
Case "PC"
bPC = True
End Select
Ich würde lieber etwas, das gut einen API-Aufruf im Gegensatz zu den Blick auf etwas in der Registrierung, wie wir mehr und mehr Kunden, die die Sperrung der registry.
Dank.
- Ich habe festgestellt, dass dies... SystemInformation.TerminalServerSession liefert Boolean-Wert, so dass die Antworten der TS-Frage. Ich bin mir nicht sicher, ob es gibt bool für Citrix. Noch immer untersucht.
- Ich fand es wahr für Citrix-und Windows Server 2008 TS ThinApp.
- Citrix SDK erwähnt
WFQuerySessionInformation
in IhrerWFAPI SDK
zum Beispiel citrix.com/content/dam/citrix/en_us/documents/downloads/sdk/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut: http://forums.citrix.com/message.jspa?messageID=1363711 können Sie die SESSIONNAME Umgebungsvariable.
Getestet habe ich es mit meinem PC und vor Ort habe ich bekommen:
Während aus der Ferne bekam ich
So, wie es scheint, könnte es ein einfachen Weg zu gehen, sonst klingt es wie die überprüfung der registry-Werte oder wenn bestimmte dlls vorhanden sind, wird die nächste beste Sache.
Gibt es eine API-Funktion, können Sie bestimmen, ob eine bestimmte Benutzer-session auf der Konsole angezeigt (lokal) oder über eines der remoting-Protokolle Citrix ICA (heute genannt HDX) oder Microsoft RDP.
Call WTSQuerySessionInformation mit 3. parameter WTSClientProtocolType. Die Funktion gibt zurück:
Interessanterweise ist der Rückgabewert 1 ist nicht dokumentiert, wie
WTS_PROTOCOL_TYPE_ICA
auf der MSDN-Website (zweiter link oben) mehr, aber als "Dieser Wert beibehalten wird, die für legacy-Zwecke.".Update:
XenDesktop Sitzungen nicht entdeckt werden können
WTSQuerySessionInformation
(es gibt 0 zurück, was bedeutet, Konsole). Wenn Sie möchten, eine Universelle Lösung:WTSQuerySessionInformation
. Wenn, dass gibt 1 oder 2 (ICA oder RDP), sind Sie fertig.WTSQuerySessionInformation
gibt 0 zurück (Konsole), dynamisch zu ladenwfapi.dll
und Holen Sie sich die Adresse vonWFGetActiveProtocol
WFGetActiveProtocol
mit einem parameter vonWF_CURRENT_SESSION
, die definiert ist als ((DWORD)-1)WFGetActiveProtocol
ist die Art der Sitzung. Es sollte entweder 0 (Konsole) oder 1 (ICA)Habe ich beschrieben, den Prozess im detail hier zusammen mit einem C++ - Codebeispiel und eine Arbeitsgruppe zusammengestellt, tool, gibt die aktuelle Sitzung remoting Protokoll-Typ.
Folgende @Josh die Antwort, der code würde wie folgt Aussehen:
Ich habe nicht vollständig getestet, aber es sieht aus wie es wird tun, was ich will. PCs und Terminal-Server-Berichte korrekt.
Wenn jemand eine Möglichkeit hat, dies zu testen, auf einem Citrix-box, es wäre sehr geschätzt werden!
?environ("SessionName")
zurückICA-tcp#56
.Basierend auf Helge Klein überarbeitete Antwort (oben) dachte ich, ich poste den VBA-code, um dies verwirklichen zu helfen, die Zukunft von VBA-Benutzern rufen Sie diese Seite. Helge hat schon den C++ - code auf seiner eigenen Website. Wenn Sie finden diese hilfreich, bitte upvote Helge Kleins Antwort.
Ich habe getestet dieses auf XenApp und XenDesktop.