Как определить, установлен ли клиент XenApp на компьютере пользователя? - PullRequest
1 голос
/ 06 июля 2011

Мы выполняем обновление с Citrix Metaframe до XenApp, и мне нужно знать, есть ли способ программно определить, установлен ли XenApp Web Plugin v11.0 на клиентском компьютере, когда он обращается к нашему веб-серверу для входа в систему - это было ранее это было сделано для веб-клиента Metaframe, пытаясь создать экземпляр клиента ICA в сценарии ASP, который использовал результаты, чтобы определить, предлагать ли клиент для загрузки / установки.

Текущий код для этого обнаружения:

Set icaObj = CreateObject("Citrix.ICAClient")

Приведенный выше код не находит плагин XenApp.

1 Ответ

4 голосов
/ 07 июля 2011

Я продолжил свое исследование после публикации этого вопроса, и я наконец нашел ответ.Только 3 взгляда на этот вопрос с тех пор, как я его опубликовал, но, несмотря на незаинтересованность, я считаю, что должен ответить на мой вопрос «На всякий случай», у кого-то еще есть эта проблема.

Я ошибся в своем заявлении, чтоКод, который я разместил, не нашел плагин XenApp.На самом деле это так.Возвращает действительный объект при наличии как метафрейма, так и XenAppWeb.Я разместил этот вопрос на собственных форумах Citrix, и там тоже нет ответов.

Чтобы найти ответ, я создал проект VS2008, к которому я добавил ссылку COM в библиотеку Citrix ICA - обаих устанавливают отдельно по одному.Я обнаружил, что оба имеют библиотеку COM с именем WFICALib, и искал их обоих, чтобы увидеть, есть ли что-то, что может их отличить.Я обнаружил свойство ClientVersion, которое было 9.0.xxx для метафрейма и 11.0.xxxx для XenAppWeb.

BINGO!

Из этого я вырезал следующий код, чтобы вернуть версию как функцию в VBScript:

Function GetVer()
    Dim icaObj, Ver
    On Error Resume Next
    Set icaObj = CreateObject("Citrix.ICAClient")
    if err.number = 0 then
        if IsObject(icaObj) then
           GetVer = icaObj.ClientVersion
        else
           GetVer = 0
        end if
        set icaObj = nothing
    else
        GetVer = 0
    end if
End Function

ADDENDUM:

После публикации этого ответа я обнаружил, что этот скрипт в более новых версиях Internet Explorer (например, IE9) не может надежно обнаружить плагин - иногда он работает, а иногда нет!Чтобы решить эту проблему, я переключил сценарий на JScript вместо JavaScript, и новая версия выглядит следующим образом:

<script type="text/jscript">
    function GetCitrixVersion() {
        try {
            var icaObj = new ActiveXObject("Citrix.ICAClient");
            return icaObj.ClientVersion;
        }
        catch (e) {
            return 0;
        }
    }
</script>

Обратите внимание, что тип сценария - text / jscript ,не текст / javascript.

...