如何检测用户计算机上是否安装了XenApp Client?

时间:2011-07-05 22:27:34

标签: citrix xenapp

我们正在从Citrix Metaframe升级到XenApp,我需要知道是否有办法以编程方式检测XenApp Web Plugin v11.0是否已安装在客户端计算机上,当它联系我们的Web服务器进行登录时 - 这是之前通过尝试在ASP脚本中实例化ICA客户端来为Metaframe Web客户端完成,该脚本使用结果来确定是否将客户端作为下载/安装提供。

此检测的当前代码是:

Set icaObj = CreateObject("Citrix.ICAClient")

上面的代码找不到XenApp插件。

1 个答案:

答案 0 :(得分:4)

我在发布这个问题后继续我的研究,我终于找到了答案。自我发布以来,这个问题只有3次观看,但尽管不感兴趣,我相信我应该回答我的问题,“以防万一”其他人有这个问题。

我在我的陈述中错误地认为我发布的代码没有找到XenApp插件。事实上,确实如此。它在Metaframe和XenAppWeb存在的情况下返回一个有效对象。我在Citrix自己的论坛上发布了这个问题,也没有答案。

我找到答案的答案是创建一个VS2008项目,我在其中添加了一个对Citrix ICA库的COM引用 - 两者都是一次单独安装的。我发现它们都有一个名为WFICALib的COM库,并通过它们搜索它们以查看是否有可能区分它们的东西。我发现的是一个属性ClientVersion,Metaframe为9.0.xxx,XenAppWeb为11.0.xxxx。

宾果!

从这里我剪切了以下代码,将版本作为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

<强>附录:

自发布此答案以来,我发现较新版本的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 ,而不是text / javascript。