1

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

此检测的当前代码是:

Set icaObj = CreateObject("Citrix.ICAClient")

上面的代码没有找到 XenApp 插件。

4

1 回答 1

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。

于 2011-07-06T23:01:27.730 回答