怎么得到网上最新版本的情况,并且进行下载呢?

解决方案 »

  1.   

    如果是一个exe的化,应该用另一个例如update.exe来启动,它先检查版本,根据结果来进行下载或者执行你本身的程序做成联众那种dll的形式还是比较好的,这样不用一次下载那么大的文件
      

  2.   

    Easy啦!客户端多一个网络通信的代码,每隔一段时间就连结网络到你的站点指定位置检查一下最新版本,如果比现在的新,那么就下载比现在新的东西就OK
      

  3.   

    你可以使用ftp组件来取得某个文件的日期啊,
      

  4.   

    恩,好主意呀。嘿嘿,那么怎么下载程序呀,用Delphi写一个吗?
      

  5.   

    给你一个程序,是我昨天写的,给我email,要给分的
      

  6.   

    利用流对象来处理比较灵活
    呵呵,可以将程序保存在数据库里面,然后根据版本号返回不同的版本程序。 有点 webcvs 的概念啦。
      

  7.   

    我得Email是[email protected]谢谢啦
      

  8.   

    DelphiBoy2003给个例子可以吗?  [email protected]
    THS LOT@@
      

  9.   

    是的,一般用dll比较好,写成插件
      

  10.   

    你给我的程序少一个Dll文件,编译的时候少一个控件呀!
      

  11.   

    xqhchun(梦龙) 我想先看看程序运行的效果
      

  12.   

    1、在服务器端放一个ini文件,里面记录最新的版本号和以前版本对应的要升级文件
    2、检测的时候把该ini文件下载到本地,
    3、读取最新版本号与现在版本进行对比,然后决定是不是需要升级,需要升级那些文件
      

  13.   

    http://www.fulgan.com/delphi/autoupdate_unit_for_delphi.htm
      

  14.   

    本地需要保存有现有程序的版本信息,在线升级时到升级服务器上通过http或ftp下载最新版本信息文件,此文件可以是普通文本文件或者ini文件,下载到本地后获取最新的版本信息。如果最新版本信息大于现有版本信息,则使用http或者ftp协议下载最新的文件。下载后更新即可。
    更新时可能还需要考虑你是更新dll的方式还是更新主程序的方式。不论采用哪种方式,估计主程序还是需要先关闭,这样你才能更新那些需要更新的文件。
      

  15.   

    补充一点:
        如果不操作数据库的应用软件可能很少了,所以升级时除了FTP获取最新的DLL模板,获取并执行SQL升级语句也是重要的一步。
      

  16.   

    ari的性欲居然到298了,汗一个。。服务器保存一个版本号。本地有一个,或者放在INI里,或者放在注册表里。和服务器通讯。得到服务器版本号。如果低于,就发请求,要求更新。服务器根据本地版本号。得到需要更新的文件。然后。
      

  17.   

    大致原理如下: 
    1、放置信息文本到网站。 
    2、使用TNMHTTP从网站信息文本获取文本内容。 
    3、分析文本解析所需信息。 
    4、比较程序版本提供升级信息。 
    首先,我们放置一个信息文本到自己的网站,这个文本有自己的文件格式,定义如下的格式:
    [update] 
    <ver>1.79.9.25</ver> 
    <url>http://www.xxxxxxxxxx.com/soft/1.79.9.25_update.zip</url> 
    <date>2002-9-25</date> 
    [/update]
    我们可以将它保存为update.txt文件,使用[]<>的标示符将信息分类,这里包含了程序名、版本、更新日期和下载地址。这里我假使上传到http://www.yyyyyyy.com/update.txt。 
    然后我们使用TNMHTTP组件从网站获取此文件的内容: 
    function TForm1.GetUpdateText:String; 
    begin 
    NMHTTP1.InputFileMode := FALSE; 
    NMHTTP1.OutputFileMode := FALSE; 
    NMHTTP1.ReportLevel := Status_Basic; 
    NMHTTP1.Get('http://www.yyyyyyy.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; 
    { 这个函数用来分离两个字符串中间的字符串, 
    例如 ..('xxxxxxxxxx.com','xxxxxx','.com')=>'xxxx'。 } 
    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; 
      

  18.   

    非常感谢wg007(迈克),写这么条理,这么清楚!
    感谢aiirii(ari-爱的眼睛),除了性欲高之外,提供的这个链接也不错!
    感谢楼主!
      

  19.   

    我的做法是:
    开辟一个ftp服务器,在服务器上放一个配置文件,配置文件有版本信息,和需要更新的文件列表
    用一个update.exe,启动时连接ftp服务器,下载配置文件,检查版本是否一致,不一致,则下载相应程序,则ok!
    电信软件都是用的这种模式!比较稳定
      

  20.   

    Update.exe与主程序一起运行?如果是下载主程序文件以后,然后怎样对主程序文件进行替换?
      

  21.   

    哈哈,我来说两句吧
    第一:wg007(迈克)的发的贴不是写的,而是copy的,在这里更正。
    第二:aiirii(ari-爱的眼睛),性欲比较高,比较强这是CSND里的网友都知道的,所以不要在这里表扬了
    哈哈,发言完毕
      

  22.   

    这里有一个例子源码.你可下载看看.http://www.delphibox.com/article.asp?articleid=1037
      

  23.   

    另外,给一个文档大家看吧
    http://dev.csdn.net/develop/article/19/19470.shtm
    也是在线升级的,希望每个人都在进步~!
      

  24.   

    www.2ccc.com 上面有很多源码
      

  25.   

    启动一个升级程序,获取版本及文件信息,再通过Tidhttp/Tidftp控件下载文件。
    盒子上也有例程。
      

  26.   

    还有个问题,下载后怎样替换掉正在运行的旧版EXE????