我们正在从Citrix Metaframe升级到XenApp,我需要知道是否有办法以编程方式检测XenApp Web Plugin v11.0是否已安装在客户端计算机上,当它联系我们的Web服务器进行登录时 - 这是之前通过尝试在ASP脚本中实例化ICA客户端来为Metaframe Web客户端完成,该脚本使用结果来确定是否将客户端作为下载/安装提供。
此检测的当前代码是:
Set icaObj = CreateObject("Citrix.ICAClient")
上面的代码找不到XenApp插件。
答案 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。