我有一个C#独立的Windows窗体应用程序。它连接到后台系统,该系统需要工作站名称作为识别过程的一部分。我正在使用Environment.MachineName来获取此信息。但是,使用此应用程序的客户偶尔会在Citrix环境下运行它,当他们这样做时,他们希望它引用远程计算机名称,而不是它所安装的计算机。我之前从来没有编过这样的东西,而且我对Citrix不熟悉(所以我开始了。)如何获取远程计算机名称?任何想法都非常感激。
提前非常感谢。
答案 0 :(得分:5)
在Citrix系统上,有一个名为CLIENTNAME
的环境变量,其中包含用户从Citrix连接的计算机的名称。它只是一个常规的Windows环境变量,因此您可以使用Environment.GetEnvironmentVariable
来读取它。
你可以像这样做一些快速和肮脏的事情:
var workstationName = Environment.GetEnvironmentVariable("CLIENTNAME") ?? Environment.MachineName;
对于更强大的功能,Citrix环境还具有标识Citrix会话的SESSIONNAME
变量。这两个变量的存在可能是在Citrix会话中运行的更好测试。
所以你可以这样做:
public bool IsCitrixSession() {
return Environment.GetEnvironmentVariable("CLIENTNAME") != null
&& Environment.GetEnvironmentVariable("SESSIONNAME") != null;
}
public string GetWorkstationName()
{
return IsCitrixSession() ? Environment.GetEnvironmentVariable("CLIENTNAME")
: Environment.MachineName;
}