发布此问题后,我继续研究,终于找到了答案。自从我发布这个问题以来,只有 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。