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

fhe*_*vol 1 c# network-programming citrix winforms

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

非常感谢提前.

And*_*per 5

在Citrix系统上,有一个名为的环境变量CLIENTNAME,它具有用户从Citrix连接到的机器的名称.它只是一个常规的Windows环境变量,因此您可以使用Environment.GetEnvironmentVariable它来阅读它.

你可以像这样做一些快速和肮脏的事情:

var workstationName = Environment.GetEnvironmentVariable("CLIENTNAME") ?? Environment.MachineName;
Run Code Online (Sandbox Code Playgroud)

对于更强大的功能,Citrix环境还具有SESSIONNAME标识Citrix会话的变量.这两个变量的存在可能是在Citrix会话中运行的更好测试.

所以你可以这样做:

public bool IsCitrixSession() {
    return Environment.GetEnvironmentVariable("CLIENTNAME") != null
        && Environment.GetEnvironmentVariable("SESSIONNAME") != null;
}

public string GetWorkstationName()
{
    return IsCitrixSession() ? Environment.GetEnvironmentVariable("CLIENTNAME")
                             : Environment.MachineName;
} 
Run Code Online (Sandbox Code Playgroud)