【发布时间】:2015-10-07 20:30:54
【问题描述】:
我有一个可以在 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 版本,这不再有效。上面的调用返回一个空字符串。
问题是,
- 为什么这个调用不起作用
- 是否有更好的方法来确定 C# 应用程序是否在 Citrix 上运行?
【问题讨论】:
-
对于您的情况,“特征检测”可能比“环境检测”更好。但是在不知道为什么需要这两种模式的情况下,我无法猜测。我的意思是,例如,detect whether 3D acceleration is available or not,如果这是缺少它,这是您需要的根本原因。
-
比这简单得多。如果它在本地机器上运行,则应用程序需要从本地机器上的特定位置读取一些文件。如果它在 citrix 上运行,则需要从共享驱动器加载相同的文件。
-
如果服务器上的应用程序需要远程获取文件,即使在服务器上本地打开会话以启动它(假设您的服务器可以),那么文件路径可以在本地配置文件/注册表项。