用Delphi实现软件的在线升级

筱泷521

筱泷521

2016-01-29 14:27

用Delphi实现软件的在线升级,用Delphi实现软件的在线升级
  用过一般的杀毒软件,都知道,启动程序时,常会问,网上已经有新版本的,是否升级之类的提示,现在越来越多的软件都支持在线升级,你是否也想实现这个功能?本文就如何实现在线升级,讲述一下如何通过HTTP检测是否需要下载升级版本,下载并升级。

  实现步骤:

   1、网站提供升级信息。
   2、使用HTTP从网站下载升级信息。
   3、确定是否进行升级
   4、升级程序

  下面我们定义一下升级信息:

   [文件名1]
   datetime=时间
   [文件名2]
   datetime=时间
   存为HTML文件,如定义一个update.htm
   [programe1.exe]
   datetime=2003-07-06
   [programe1.hlp]
   datetime=2003-07-06

  这里只是简单的判断一下文件的时间,如果时间比需要升级的文件时间小的,表示要下载新版本升级它。当然要做到十全十美,这是判断是不合理的,这里只作个简单的介绍。

  写个fuction,判断是否有新的版本要升级

function ExistNewfile&:boolean;
var i,iFileHandle:integer;
FileDateTime:TDateTime;
AppIni:TiniFile;
g_path:string;
url:string;
files:TStrings;
begin
result:=false;
url:=http://yousoft.hi.com.cn/update.htm/; //要升级的服务器
g_path:=ExtractFilePath(application.ExeName); //升级程序的路径
if copy(g_path,length(g_path),1)<> then g_path:=g_path+;
if copy(url,length(url),1)<>/ then url:=url+/;

//下载升级信息文件
try
HTTPFiles.InputFileMode := true;
HTTPFiles.OutputFileMode := FALSE;
HTTPFiles.ReportLevel := Status_Basic;
HTTPFiles.Body:=g_path+update/update.ini; //下载后保存到程序的update目录下
HTTPFiles.Get(url);
except
result:=false; //取得升级信息出错!,不用再继续
exit;
end;
try
files:=TStringlist.Create; //有哪些文件?
AppIni := TIniFile.Create(g_path+updateupdate.ini);
AppIni.ReadSections(files);
for i:=0 to files.Count-1 do
try
iFileHandle :=FileOpen(g_path+files[i],fmShareDenyNone);
FileDateTime:=FileDateToDateTime(FileGetDate(iFileHandle)); //取得文件时间
FileClose(iFileHandle);
//是否要下载文件
if FileDateTimebegin
result:=true;
break;
end;
except
end;
finally
AppIni.free;
files.Free;
end;
end;
  取得files后文件下载!httpfiles为TNMHTTP

HTTPFiles.InputFileMode := true;
HTTPFiles.OutputFileMode := FALSE;
HTTPFiles.ReportLevel := Status_Basic;
HTTPFiles.Body:=g_path+update/+files[i];
HTTPFiles.Get(url);
  把下载后的文件复制到原程序,并备份出一份

for i:=0 to files.Count-1 do //备份文件
begin
//备份一份文件出来
copyfile(pchar(g_path+files[i]),pchar(g_path+files[i]+.bak),false);
end;
for i:=0 to files.Count-1 do //从update复制新文件
begin
copyfile(pchar(g_path+update+files[i]),pchar(g_path+files[i]),false);
end;
  因为采用了TNMHTTP,文件下载的进度并不是很好控制,可以在TNMHTTP的PacketRecvd事件,确定进度
在线升级的方法就这样简单介绍了,在DELPHI6+WIN2000环境调试通过,这里我没有写出完整的代码,有兴趣可以自己写写。在我的主页我做了演示程序,大家可以看看,网址是:http://yousoft.hi..com.cn

展开更多 50%)
分享

猜你喜欢

用Delphi实现软件的在线升级

Delphi
用Delphi实现软件的在线升级

QQ软件如何在线升级?

电脑入门
QQ软件如何在线升级?

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用Delphi实现壁纸更换

编程语言 网络编程
用Delphi实现壁纸更换

用Delphi实现打印功能

Delphi
用Delphi实现打印功能

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用Delphi实现文件关联

Delphi
用Delphi实现文件关联

用asp实现QQ在线查询

ASP
用asp实现QQ在线查询

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

挑战最棒的留言本的源码(四)

挑战最棒的留言本的源码(四)

Delphi实现远程串口的数据采集

Delphi实现远程串口的数据采集
下拉加载更多内容 ↓