如何确定C#App是否在Citrix下运行

时间:2015-10-07 20:30:54

标签: c# wpf citrix

我有一个可以在2种模式下运行的C#WPF应用程序。第一个是Citrix,第二个是本地安装和运行。

这个应用程序已经过时了,我们正在使用Windows远程桌面API调用WTSQuerySessionInformation来判断我们是否在Citrix上运行。

https://msdn.microsoft.com/en-us/library/aa383838(v=vs.85).aspx

电话基本上就是这个,

hRet = WTSQuerySessionInformation(WF_CURRENT_SERVER_HANDLE, WF_CURRENT_SESSION,
            WTS_INFO_CLASS.WTSApplicationName, ref ppBuffer, ref iBytesReturned);

因此它在当前的远程桌面会话中返回应用程序名称,并且假设如果没有应用程序名称,则它不在Citrix下运行。

由于我们升级了我们正在使用的Citrix版本,因此不再有效。上面的调用返回一个空字符串。

问题是,

  1. 为什么这个电话不能正常工作
  2. 有没有更好的方法来确定C#应用程序是否在Citrix上运行?

2 个答案:

答案 0 :(得分:0)

坚持使用原始方法,但不是查询WTSApplicationName而是查询WTSClientProtocolType。

所以我调用WTSQuerySessionInformation,将第3个参数设置为WTSClientProtocolType。这回来了,

0 for console sessions
1 for ICA sessions
2 for RDP sessions

答案 1 :(得分:-1)

我们用这个:

var sessionName = (Environment.GetEnvironmentVariable("SessionName") ?? "").ToUpper();
return sessionName.StartsWith("ICA") || sessionName.StartsWith("RDP");

ICA推断Citrix,RDP远程桌面。