一。怎么自动提取服务器的最新文件版本呢?
二。比较版本后怎么下载到客户端呢?
谢谢》》》》》

解决方案 »

  1.   

    1、在服务器端做一个升级应用服务器,用来管理需要升级的文件
    2、客户端升级的思路基本上是这样:
    a)给服务器发送各文件的版本、大小等信息
    b)应用服务器进行比较,列出需要升级的文件清单并回传给客户端
    c)客户端根据文件清单,逐一下载文件
    3、下载的方法很多,如HTTP、FTP方式,如果在局域网内也可以考虑直接复制
       应用服务器也可以生成一个接口,只要客户端给出文件位置就可以传送文件内容具体实现的时候可以考虑你的实际情况,完成需求就可以了
      

  2.   

    [转]希望对你有帮助 用DELPHI制作在线程序升级信息查询  
       越来越多的程序支持在线升级功能,本文介绍的就是如何从网站获取升级信息。这里我主要使用版本信息来检测是否需要下载升级版本。 
    大致原理如下: 
      1、放置信息文本到网站。 
      2、使用TNMHTTP从网站信息文本获取文本内容。 
      3、分析文本解析所需信息。 
      4、比较程序版本提供升级信息。 
        首先,我们放置一个信息文本到自己的网站,这个文本有自己的文件格式,我定义了如下的格式: 
      [update] 
        <ver>1.79.9.25</ver> 
        <url>http://delphibox.com/softm/3_update.zip</url>
        <date>2002-9-25</date> 
      [/update] 
    我们可以将它保存为update.txt文件,使用[]<>的标示符将信息分类,这里包含了程序名、版本、更新日期和下载地址。这里我假使上传到http://2ccc.com/update.txt。
        然后我们使用TNMHTTP组件从网站获取此文件的内容: 
    function TForm1.GetUpdateText:String; 
    begin 
      NMHTTP1.InputFileMode := FALSE; 
      NMHTTP1.OutputFileMode := FALSE; 
      NMHTTP1.ReportLevel := Status_Basic; 
      NMHTTP1.Get('http://2ccc.com/update.txt'); { 获取网站文本 } 
      Result:=NMHTTP1.Body; 
    end; 
        获取文本以后,我们要将其中的信息分离,我使用了如下的函数: 
    function TForm1.AnalyseUpdate(Body:String;var Update:TUpdate):Boolean; 
    var 
      TmpStr,Ver:String; 
      function CenterStr(Src:String;Before,After:String):String; 
      { 这个函数用来分离两个字符串中间的字符串, 
        例如 ..('DelphiBox.com','Delphi','.com')=>'Box'。 } 
      var 
        Pos1,Pos2:WORD; 
      begin 
        Pos1:=Pos(Before,Src)+Length(Before); 
        Pos2:=Pos(After,Src); 
        Result:=Copy(Src,Pos1,Pos2-Pos1); 
      end; 
    begin 
      TmpStr:=CenterStr(Body,'update'); { 得到程序名间的升级信息 } 
      if TmpStr='' then 
        Result:=False else { 找不到此文件升级信息 } 
      begin 
        Ver:=CenterStr(TmpStr,'<ver>','</ver>'); 
        Update.Version:=SeparateVerStr(Ver); { 解析版本 } 
        Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>')); { 解析日期 } 
        Update.URL:=CenterStr(TmpStr,'<url>','</url>'); { 解析升级地址 } 
        Result:=True; 
      end; 
    end; 
    其中TUpdate是我定义的信息的记录格式: 
      TSimpleVersion=record { 简化的版本信息 } 
        dwProductVersionMS: DWORD; { 主版本 } 
        dwProductVersionLS: DWORD; { 辅版本 } 
      end; 
      TUpdate=record       { 升级信息 } 
        Name:String[63]; { 程序名 } 
        Version:TSimpleVersion; { 版本 } 
        Date:TDate; { 日期 } 
        URL:ShortString; { 下载地址 } 
      end; 
    而SeparateVerStr()函数是将得到字符串形式的升级版本信息转换为简化的版本信息格式: 
    function SeparateVerStr(s:String):TSimpleVersion; 
    const 
      Separator='.'; { 以为'.'分割符 } 
    var 
      p,v1,v2,v3,v4:WORD; 
    begin 
      if Length(s)=0 then Exit; 
      p:=pos(Separator, s); 
      v1:=StrToInt(copy(s,1,p-1)); 
      Delete(s,1,p); 
      p:=Pos(Separator,s); 
      v2:=StrToInt(copy(s,1,p-1)); 
      Delete(s,1,p); 
      p:=Pos(Separator,s); 
      v3:=StrToInt(copy(s,1,p-1)); 
      Delete(s,1,p); 
      v4:=StrToInt(s); 
      Result.dwProductVersionMS:=v1*$10000+v2; 
      Result.dwProductVersionLS:=v3*$10000+v4; 
    end; 
        最后要做的就是比较文件的版本信息,先得到自己的版本,我使用如下的函数: 
    function GetBuildInfo(FName:string):TSimpleVersion; { 得到自身版本信息 } 
    var 
      VerInfoSize: DWORD; 
      VerInfo: Pointer; 
      VerValueSize: DWORD; 
      VerValue: PVSFixedFileInfo; 
      Dummy: DWORD; 
    begin 
      VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy); 
      GetMem(VerInfo, VerInfoSize); 
      GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); 
      VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); 
      with VerValue^ do 
      begin 
        Result.dwProductVersionMS := dwFileVersionMS; { 主版本 } 
        Result.dwProductVersionLS := dwFileVersionLS; { 辅版本 } 
      end; 
      FreeMem(VerInfo, VerInfoSize); 
    end; 
    然后使用如下的函数比较网站的升级版本和现在的版本,如果返回TRUE,说明有新版本文件: 
    function VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean; 
    begin 
      if (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) then 
      begin 
        Result:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS; 
      end else 
      begin 
        Result:=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS 
      end; 
    end; 
        到这里基本方法就介绍完了,我在DELPHI+WIN2000环境调试通过,这里我没有写出完整的代码,在我的主页我做了演示程序,大家可以下载慢慢研究。 
    我的网址是:http://delphibox.com/ 或 http://2ccc.com/
    如果有问题可以给我来信交流:[email protected] 
     
     
      

  3.   

    局域网内的自动软件升级做法比Internet方式的简单多了!1、设置升级文件的路径
    2、升级文件直接放在制定路径下,不压缩
    3、检测文件的版本,决定是否需要覆盖现有的文件*不需要做一个升级应用服务器,因为已经可以直接访问到新的文件,也可以知道文件的版本信息。可能会略微慢点
      

  4.   

    可以去这里看一看,免费提供,绝对实用:
    http://www.aslike.net