มีโปรแกรมต่างๆ มากมายที่สนับสนุนฟังก์ชันการอัพเกรดแบบออนไลน์ บทความนี้จะแนะนำวิธีการรับข้อมูลการอัพเกรดจากเว็บไซต์ ที่นี่ฉันใช้ข้อมูลเวอร์ชันเป็นหลักเพื่อตรวจสอบว่าฉันต้องดาวน์โหลดเวอร์ชันที่อัปเกรดหรือไม่
หลักการทั่วไปมีดังนี้:
1. วางข้อความข้อมูลบนเว็บไซต์
2. ใช้ TNMHTTP เพื่อรับเนื้อหาข้อความจากข้อความข้อมูลเว็บไซต์
3. วิเคราะห์ข้อมูลที่จำเป็นสำหรับการแยกวิเคราะห์ข้อความ
4. เปรียบเทียบเวอร์ชันของโปรแกรมเพื่อให้ข้อมูลการอัพเกรด
ขั้นแรก เราวางข้อความข้อมูลบนเว็บไซต์ของเรา ข้อความนี้มีรูปแบบไฟล์ของตัวเอง ฉันกำหนดรูปแบบดังต่อไปนี้:
[อัปเดต]
<ver>1.79.9.25</ver>
<url>http://delphibox.com/softm/3_update.zip</url>
<วันที่>25-9-2545</date>
[/อัปเดต]
เราสามารถบันทึกเป็นไฟล์ update.txt และใช้ตัวระบุ []<> เพื่อจัดประเภทข้อมูล ซึ่งรวมถึงชื่อโปรแกรม เวอร์ชัน วันที่อัปเดต และที่อยู่การดาวน์โหลด ที่นี่ฉันคิดว่าฉันอัปโหลดไปที่http://2ccc.com/update.txt
จากนั้นเราใช้ส่วนประกอบ TNMHTTP เพื่อรับเนื้อหาของไฟล์นี้จากเว็บไซต์:
ฟังก์ชัน TForm1.GetUpdateText:String;
เริ่ม
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.Get('http://2ccc.com/update.txt'); {รับข้อความเว็บไซต์}
ผลลัพธ์:=NMHTTP1.Body;
จบ;
หลังจากได้รับข้อความแล้ว เราต้องแยกข้อมูลออก ฉันใช้ฟังก์ชันต่อไปนี้:
ฟังก์ชัน TForm1.AnalyseUpdate (Body:String; var Update: TUpdate): บูลีน;
var
TmpStr, Ver:สตริง;
ฟังก์ชั่น CenterStr(Src:String;Before,After:String):String;
{ ฟังก์ชันนี้ใช้เพื่อแยกสตริงที่อยู่ตรงกลางของสองสตริง
ตัวอย่างเช่น..('DelphiBox.com','Delphi','.com')=>'Box' -
var
Pos1, Pos2: คำ;
เริ่ม
Pos1:=Pos(ก่อน,Src)+ความยาว(ก่อน);
Pos2:=Pos(หลัง,Src);
ผลลัพธ์:=คัดลอก(Src,Pos1,Pos2-Pos1);
จบ;
เริ่ม
TmpStr:=CenterStr(Body,'update'); {รับข้อมูลการอัพเกรดระหว่างชื่อโปรแกรม}
ถ้า TmpStr='' แล้ว
ผลลัพธ์:=False else {ไม่พบข้อมูลการอัพเกรดไฟล์นี้}
เริ่ม
Ver:=CenterStr(TmpStr,'<ver>','</ver>');
Update.Version:=SeparateVerStr(Ver); {เวอร์ชันแยกวิเคราะห์}
Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>')); { วันที่แยกวิเคราะห์}
Update.URL:=CenterStr(TmpStr,'<url>','</url>'); { แก้ไขที่อยู่การอัพเกรด}
ผลลัพธ์:=จริง;
จบ;
จบ;
โดยที่ TUpdate คือรูปแบบการบันทึกของข้อมูลที่ฉันกำหนด:
TSimpleVersion=record{ข้อมูลเวอร์ชันแบบง่าย}
dwPRoductVersionMS: DWORD; {เวอร์ชันหลัก}
dwProductVersionLS: DWORD; {เวอร์ชันรอง}
จบ;
TUpdate=บันทึก {ข้อมูลการอัพเกรด}
ชื่อ:สตริง[63];{ชื่อโปรแกรม}
เวอร์ชัน:TSimpleVersion;{version}
วันที่:TDate;{date}
URL:ShortString;{ที่อยู่ดาวน์โหลด}
จบ;
ฟังก์ชัน SeparateVerStr() จะแปลงข้อมูลเวอร์ชันที่อัปเกรดแล้วในรูปแบบสตริงให้เป็นรูปแบบข้อมูลเวอร์ชันแบบง่าย:
ฟังก์ชั่น SeparateVerStr (s: String): TSimpleVersion;
ค่าคงที่
ตัวคั่น='.'; {คิดว่า '.'
var
p,v1,v2,v3,v4:คำ;
เริ่ม
ถ้าความยาว = 0 ให้ออก;
p:=pos(ตัวคั่น, s);
v1:=StrToInt(คัดลอก(s,1,p-1));
ลบ(s,1,p);
p:=Pos(ตัวคั่น,s);
v2:=StrToInt(คัดลอก(s,1,p-1));
ลบ(s,1,p);
p:=Pos(ตัวคั่น,s);
v3:=StrToInt(คัดลอก(s,1,p-1));
ลบ(s,1,p);
v4:=StrToInt(s);
Result.dwProductVersionMS:=v1*$10,000+v2;
Result.dwProductVersionLS:=v3*$10,000+v4;
จบ;
สิ่งสุดท้ายที่ต้องทำคือการเปรียบเทียบข้อมูลเวอร์ชันของไฟล์และรับเวอร์ชันของคุณเองก่อน ฉันใช้ฟังก์ชันต่อไปนี้:
ฟังก์ชั่น GetBuildInfo(FName:string):TSimpleVersion; {รับข้อมูลเวอร์ชันของตัวเอง}
var
VerInfoSize: DWORD;
VerInfo: ตัวชี้;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
จำลอง: DWORD;
เริ่ม
VerInfoSize := GetFileVersionInfoSize(PChar(FName), จำลอง);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '/', ตัวชี้ (VerValue), VerValueSize);
ด้วย VerValue^ ทำ
เริ่ม
Result.dwProductVersionMS := dwFileVersionMS;
Result.dwProductVersionLS := dwFileVersionLS;
จบ;
FreeMem(VerInfo, VerInfoSize);
จบ;
จากนั้นใช้ฟังก์ชันต่อไปนี้เพื่อเปรียบเทียบเวอร์ชันที่อัปเกรดของเว็บไซต์กับเวอร์ชันปัจจุบัน หากส่งคืน TRUE แสดงว่ามีไฟล์เวอร์ชันใหม่:
ฟังก์ชั่น VersionCheck (OriVer, NewVer: TSimpleVersion): บูลีน;
เริ่ม
ถ้า (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) แล้ว
เริ่ม
ผลลัพธ์:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS;
จบอย่างอื่น
เริ่ม
ผลลัพธ์:=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS
จบ;
จบ;