점점 더 많은 프로그램이 온라인 업그레이드 기능을 지원합니다. 이 기사에서는 웹사이트에서 업그레이드 정보를 얻는 방법을 소개합니다. 여기서는 주로 버전 정보를 사용하여 업그레이드된 버전을 다운로드해야 하는지 여부를 감지합니다.
일반적인 원칙은 다음과 같습니다.
1. 웹사이트에 정보 텍스트를 배치합니다.
2. TNMHTTP를 사용하여 웹사이트 정보 텍스트에서 텍스트 콘텐츠를 가져옵니다.
3. 텍스트 파싱에 필요한 정보를 분석합니다.
4. 프로그램 버전을 비교하여 업그레이드 정보를 제공합니다.
먼저, 우리는 웹사이트에 정보 텍스트를 배치합니다. 이 텍스트는 다음과 같은 고유한 파일 형식을 갖습니다.
[업데이트]
<ver>1.79.9.25</ver>
<url>http://delphibox.com/softm/3_update.zip</url>
<date>2002-9-25</date>
[/업데이트]
update.txt 파일로 저장하고 []<> 식별자를 사용하여 프로그램 이름, 버전, 업데이트 날짜 및 다운로드 주소가 포함된 정보를 분류할 수 있습니다. 여기서는 http://2ccc.com/update.txt에 업로드한다고 가정합니다.
그런 다음 TNMHTTP 구성 요소를 사용하여 웹 사이트에서 이 파일의 내용을 가져옵니다.
함수 TForm1.GetUpdateText:String;
시작하다
NMHTTP1.InputFileMode := 거짓;
NMHTTP1.OutputFileMode := 거짓;
NMHTTP1.ReportLevel := 상태_기본;
NMHTTP1.Get('http://2ccc.com/update.txt') {웹사이트 텍스트 가져오기}
결과:=NMHTTP1.Body;
끝;
텍스트를 얻은 후 정보를 분리해야 합니다. 저는 다음 기능을 사용했습니다.
함수 TForm1.AnalyseUpdate(Body:String;var Update:TUpdate):Boolean;
var
TmpStr,버전:문자열;
function CenterStr(Src:String;Before,After:String):String;
{ 이 함수는 두 문자열 사이에서 문자열을 분리하는 데 사용됩니다.
예를 들어..('DelphiBox.com','Delphi','.com')=>'Box'. }
var
위치1,위치2:워드;
시작하다
Pos1:=Pos(전,원본)+길이(전);
Pos2:=Pos(이후,소스);
결과:=Copy(Src,Pos1,Pos2-Pos1);
끝;
시작하다
TmpStr:=CenterStr(Body,'update') {프로그램 이름 간 업그레이드 정보 가져오기}
TmpStr=''이면
결과:=False else {이 파일 업그레이드 정보를 찾을 수 없습니다.}
시작하다
Ver:=CenterStr(TmpStr,'<ver>','</ver>');
Update.Version:=SeparateVerStr(버전) {구문 분석 버전}
Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>')) { 구문 분석 날짜}
Update.URL:=CenterStr(TmpStr,'<url>','</url>') {업그레이드 주소 확인}
결과:=참;
끝;
끝;
여기서 TUpdate는 내가 정의한 정보의 기록 형식입니다.
TSimpleVersion=record{간략화된 버전 정보}
dwPROductVersionMS: DWORD;{주 버전}
dwProductVersionLS: DWORD;{부 버전}
끝;
TUpdate=기록 {업그레이드 정보}
이름:문자열[63];{프로그램 이름}
버전:TSimpleVersion;{버전}
날짜:TDate;{date}
URL:ShortString;{다운로드 주소}
끝;
SeparateVerStr() 함수는 문자열 형식의 업그레이드된 버전 정보를 단순화된 버전 정보 형식으로 변환합니다.
함수 SeparateVerStr(s:String):TSimpleVersion;
const
구분 기호='.'; {'.'라고 생각하세요.
var
p,v1,v2,v3,v4:WORD;
시작하다
길이(들)=0이면 종료합니다.
p:=pos(구분자, s);
v1:=StrToInt(copy(s,1,p-1));
삭제(s,1,p);
p:=Pos(구분자,s);
v2:=StrToInt(copy(s,1,p-1));
삭제(s,1,p);
p:=Pos(구분자,s);
v3:=StrToInt(copy(s,1,p-1));
삭제(s,1,p);
v4:=StrToInt(s);
Result.dwProductVersionMS:=v1*$10000+v2;
Result.dwProductVersionLS:=v3*$10000+v4;
끝;
마지막으로 할 일은 파일의 버전 정보를 비교하고 먼저 다음 기능을 사용하여 자신의 버전을 얻는 것입니다.
function GetBuildInfo(FName:string):TSimpleVersion {자체 버전 정보 가져오기}
var
VerInfoSize: DWORD;
VerInfo: 포인터;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
더미: DWORD;
시작하다
VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '/', Pointer(VerValue), VerValueSize);
VerValue^로
시작하다
Result.dwProductVersionMS := dwFileVersionMS; {주요 버전}
Result.dwProductVersionLS := dwFileVersionLS {부 버전}
끝;
FreeMem(VerInfo, VerInfoSize);
끝;
그런 다음 다음 함수를 사용하여 웹 사이트의 업그레이드된 버전을 현재 버전과 비교합니다. TRUE가 반환되면 파일의 새 버전이 있음을 의미합니다.
함수 VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean;
시작하다
if (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) 그러면
시작하다
결과:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS;
다른 끝
시작하다
결과:=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS
끝;
끝;