Приложение C # должно ссылаться на удаленную рабочую станцию ​​в среде Citrix.

У меня есть автономное приложение Windows Forms на C #. Он подключается к бэк-офисной системе, которой в процессе идентификации требуется имя рабочей станции. Я использую Environment.MachineName, чтобы получить это. Однако клиент, использующий это приложение, будет иногда запускать его в среде Citrix, и, когда они это делают, они хотят, чтобы оно ссылалось на имя удаленной машины, а не на машину, на которой оно установлено. Я никогда раньше не кодировал ничего подобного и не знаком с Citrix (так что я готов взлететь). Как мне узнать имя удаленной машины? Любые идеи очень ценятся.

Заранее большое спасибо.


person fhevol    schedule 10.01.2013    source источник


Ответы (1)


В системах Citrix есть переменная среды с именем CLIENTNAME, которая имеет имя машины, с которой пользователь подключается к Citrix. Это обычная переменная среды Windows, поэтому вы можете использовать Environment.GetEnvironmentVariable для ее чтения.

Вы можете сделать что-нибудь быстрое и грязное вроде этого:

var workstationName = Environment.GetEnvironmentVariable("CLIENTNAME") ?? Environment.MachineName;

Для чего-то более надежного в среде 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;
} 
person Andrew Cooper    schedule 10.01.2013
comment
Огромное спасибо. Я считаю, что это читается на C # с помощью: System.Environment.GetEnvironmentVariable (CLIENTNAME, EnvironmentVariableTarget.Process); - person fhevol; 10.01.2013
comment
Просто обратите внимание, что качество значения в CLIENTNAME может немного варьироваться в зависимости от ОС клиентского компьютера и возраста клиента Citrix. Это не проблема для клиентов ПК с Windows - они возвращают имя машины. В основном это проблема старых версий приемников iOS и Android, поэтому убедитесь, что ваш клиент использует последние версии этих приемников. - person donovan; 10.01.2013
comment
@AndrewCooper Абсолютно молодец, я очень ценю это, ты сэкономил мне часы - person fhevol; 10.01.2013