C#应用程序需要在Citrix环境中引用远程工作站

时间:2013-01-10 03:09:04

标签: c# winforms network-programming citrix

我有一个C#独立的Windows窗体应用程序。它连接到后台系统,该系统需要工作站名称作为识别过程的一部分。我正在使用Environment.MachineName来获取此信息。但是,使用此应用程序的客户偶尔会在Citrix环境下运行它,当他们这样做时,他们希望它引用远程计算机名称,而不是它所安装的计算机。我之前从来没有编过这样的东西,而且我对Citrix不熟悉(所以我开始了。)如何获取远程计算机名称?任何想法都非常感激。

提前非常感谢。

1 个答案:

答案 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;
}