2011-07-05 63 views
1

我們正在從Citrix Metaframe升級到XenApp,並且我需要知道是否有方法以編程方式檢測XenApp Web插件v11.0是否已在客戶端計算機上安裝,當它聯繫我們的Web服務器進行登錄時 - 此前通過嘗試在ASP腳本中實例化ICA客戶端來完成Metaframe Web客戶端,該腳本使用結果來確定是否提供客戶端作爲下載/安裝。如何檢測用戶計算機上是否安裝了XenApp Client?

這種檢測當前的代碼是:

Set icaObj = CreateObject("Citrix.ICAClient") 

上面的代碼沒有找到XenApp的插件。

回答

3

發帖後我繼續研究,終於找到了答案。自從我發佈這個問題以來,只有3個觀點,但是我認爲我應該回答我的問題,「Just in Case」中有其他人有這個問題。

我在我的聲明中誤以爲我發佈的代碼沒有找到XenApp插件。事實上,它的確如此。它在Metaframe和XenAppWeb的同時返回一個有效的對象。我在思傑自己的論壇上發佈了這個問題,也沒有答案。

我找到答案的方法是創建一個VS2008項目,我在該項目中添加了一個COM引用到Citrix ICA庫 - 它們都是單獨安裝的。我發現兩者都有一個名爲WFICALib的COM庫,並通過它們查找是否有可能區分它們的東西。我發現的是一個屬性ClientVersion,它對於Metaframe是9.0.xxx,對於XenAppWeb是11.0.xxxx。

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 

附錄:

由於張貼這個答案,我發現這個腳本在新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的。

相關問題