越来越多的
程序支持在线升级功能,本文介绍的就是如何从网站获取升级信息。这里我主要使用版本信息来检测是否需要
下载升级版本。
大致原理如下:
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: