我现在的做法是程序运行时,先看数据库中表a的字段是否等于写死在程序中的某个字符,如"V1.0版",每次我改了程序时,会先修改这个字符,如改为"V12.0版",再在数据库中把表a中字段的内容也改成一样的。用户在客户端运行程序时,如果是旧版本,就不能运行,就要自己去公共盘考下最新的系统把旧的覆盖才可以用。我看到许多系统都可以在客户端自动更新,而不用自己拷贝新程序,请问是如何做到的?可否提供一段代码?谢谢!

解决方案 »

  1.   

    发这么多贴,全回你!
    晕,你判断一下版本不一样后就copyfile('\\server\share\a.exe','.\',false);
    服务器做一个共享文件夹,把文件放在上面!
      

  2.   

    你可以在服务器上建一个HTTP或FTP,把你的最新程序放在这里面,再建一上文件文件,里面写上最新程序的版本号,当客户端程序启动时就以HTTP或FTP的方式把服务器上写着版本号的那个文本文件载下来,比较本机的客户端版本号和这个文本文件里的版本号,如果发现小于最新版本号,就下载安装就行了,你可以把最新的程序做成安装程序,载下来后自动运行安装程序,也可以只放需要更新的文件,那你就需要把所有文件都载下来后挨个替换,当程序本身也需要替换的时候可以用以下代码
    procedure TForm1.UpdateSelf;
    var f: textfile;
    begin
      AssignFile(f, RootPath+'\UpdateSelf.bat');
      Rewrite(f);
      writeln(f, '@echo off');
      writeln(f, ':loop');
      Writeln(f, 'del .\'+ExtractFileName(Application.ExeName));
      Writeln(f, 'ren '+RootPath+'\NewServerUpdate.exe'+' ServerUpdate.exe');
      writeln(f, 'if exist .\NewServerUpdate.exe  goto loop');
      {if IsAuto then
         Writeln(f, RootPath+'\ServerUpdate.exe Auto')
      else
         Writeln(f, RootPath+'\ServerUpdate.exe');}
      Writeln(f, 'del .\UpdateSelf.bat');
      CloseFile(f);
      WinExec(PChar(ExtracTFilePath(Application.ExeName)+'UpdateSelf.bat'), SW_HIDE);
    end;
      

  3.   


    Visession Anyupdate自动升级软件系统 
    免费将自动升级功能加入您的软件产品中网站:http://www.visession.com/anyupdate
    下载:http://www.visession.com/anyupdate/DownLoad.htm
      

  4.   

    写一个更新程序Update.exe
    里面写上自动下载的方法,比如文件在什么位置,新版本的信息,当然这些都是固定的,以启动此程序就下载版本,下载完后覆盖原文件主程序判断版本值不一样时启动Update.exe,并且关闭主程序,让Update.exe自己去下载并更新
      

  5.   

    我是在update.dll里对比文件大小,遍历ftp上的目标文件夹下的所有文件.不过有时候文件大小改的很少就不会更新了,也在调整中,我想把日期对比再加进去应该可以了
      

  6.   

    我同意用MD5,但是MD5加密那么多文件实在太慢了,楼上有什么方法?
      

  7.   

    用日期/大小比較不严謹.
    >>修改时间精确到秒,我认为这是可行的办法。