我有个ActiveX放在页面上index.jsp,AcitveX加载后,会调用C:\windows\system32目录中的a.dll和b.dll中的方法。
activex因为是放在页面上,带上版本,这样只要版本升级,客户机器就会自动更新。
但如果a.dll和b.dll有了更新,客户机应该也更新,但我不知道该怎么让这两个dll自动更新。
我之前是将activex,a.dll,b.dll打在一个setup.exe中,然后页面加载的时候,activex判断c:\windows\system32目录中是否有a.dll和b.dll,如果没有则提示用户下载并安装setup.exe。现在有200多台机器,都已经这样安装了。
可是现在a.dll和b.dll功能上都有了升级,我希望用户访问index.jsp的时候,能判断并自动升级a.dll和b.dll。
应该如何实现呢?
我没想到好的方案。大家有简便易行的解决方案没?

解决方案 »

  1.   

    先写个小ocx,这个ocx用来检测本地的版本,与更新服务器上的版本是否一致.如果不一致,则自动从服务器下载到本地,并注册.
    然后这个小ocx的工作完成后,自动再转到包含正常的ocx的页面.
      

  2.   

    把他们做成CAB包,写好配置文件就可以了
      

  3.   

    能详细说说吗?
    怎么做成cab包?
    ocx,dll都做到cab包里吗?
    配置文件怎么写?
      

  4.   

    我以前的做法是 每个文件编译的时候自动增加版本. 然后在ocx 中加一个获取版本的方法.
    服务器asp 文件中加script 进行更新 script 脚本我这样写, 因为ocx 在ie 打开时是使用状态,所以要关闭IE窗口<p align="center">
    <span id="clswindow"> </span>
    <script language="javascript">
    <!--
      function CloseSelfWindow()
      {
        setInterval("DecNum();",1000);             //第二个: 每隔 1s 执行一次
      }
      var ele = document.getElementById("clswindow");
      var tt = 4;    //4秒后关闭
      function DecNum()
      {
        tt--;
        ele.innerHTML ='<font color="blue">安装客户端程序需关闭本窗口,<font color="red"><B>' +tt+'</B></font>秒后本窗口自动关闭</font>';
        if (tt==0)
        {
         window.opener=null;
         window.open("","_self");
         window.close(); 
        }
      }
    //-->
    </script>
    <script language="VBScript">
       ObjTrayVer=258+98      'Clitray.exe和trayapp.dll版本的和 clitray.exe+trayapp.dll
       Objhandver=76+1      '手写板程序版本 handapp.dll
       ObjWordVer=15      'word Ocx 版本,wordapp.dll
       On Error Resume Next
       set objtray = CreateObject("TrayApp.TrayObj")
       set objhand = CreateObject("HandApp.HandObj")
       set objword = CreateObject("WordApp.WordObj")
       if err<>0 then 
         MsgBox("客户端程序尚未安装,请先安装客户端程序!")
         Self.Location="../qwcli.zip"
         call CloseSelfWindow()
       else 
         trayver=objtray.GetTrayObjVer
         handver=objhand.GetHandObjVer
         wordver=objword.GetWordObjVer
         if err<>0 then 
           if MsgBox("客户端程序版本已更新,是否现在更新?",vbYesNo)=vbYes then 
             Self.Location="../qwcli.exe"
             call CloseSelfWindow()   
           end if
         else
           if (trayver<ObjTrayVer)or(handver<Objhandver)or(wordver<ObjWordVer) then 
             if MsgBox("客户端程序有更新版本,是否现在更新?",vbYesNo)=vbYes  then 
               Self.Location="../qwcli.exe"
               call CloseSelfWindow()
             end if 
           end if
         end if
         set objtray = nothing
         set objhand = nothing
         set objword = nothing
       end if  
    </script>
      

  5.   

    呵呵,我和你的实现方式有点类似,只不过我的验证是否安装和是否更新版本是放在ActiveX里了。
    因为我这里是jsp,不是asp,不能像VB脚本那样直接检测文件版本。
    我原来是想通过Activex判断版本,如果发现不一直就直接从服务器端直接下载到客户机。
    可惜还不知道该怎么做。
    暂时也没时间实现这个功能。
      

  6.   

    不妨看看CBX框架,基于高速http协议,同时具有Object Pooling机制,从容应对大量并发客户端,模式和Midas相同,但是比Delphi自己的Midas实现要好得多。基于Delphi7。讨论QQ群:16169282 
    这个框架几乎是国产多层框架中最好的一个,同时体现SmartClient和RIA思想。 
    Demo(需要客户端初始化): http://117.21.247.37/cbx/AppSvr.dll/Splash.ao