我有一个可以在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版本,因此不再有效。上面的调用返回一个空字符串。
问题是,
答案 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远程桌面。