Semakin banyak program yang mendukung fungsi pemutakhiran online. Artikel ini memperkenalkan cara memperoleh informasi pemutakhiran dari situs web. Di sini saya terutama menggunakan informasi versi untuk mendeteksi apakah saya perlu mengunduh versi yang ditingkatkan.
Prinsip umumnya adalah sebagai berikut:
1. Tempatkan teks informasi di website.
2. Gunakan TNMHTTP untuk memperoleh konten teks dari teks informasi situs web.
3. Menganalisis informasi yang diperlukan untuk penguraian teks.
4. Bandingkan versi program untuk memberikan informasi peningkatan.
Pertama, kami menempatkan teks informasi di situs web kami. Teks ini memiliki format file sendiri. Saya mendefinisikan format berikut:
[memperbarui]
<ver>1.79.9.25</ver>
<url>http://delphibox.com/softm/3_update.zip</url>
<tanggal>25-9-2002</tanggal>
[/memperbarui]
Kita dapat menyimpannya sebagai file update.txt dan menggunakan pengidentifikasi []<> untuk mengklasifikasikan informasi, yang mencakup nama program, versi, tanggal pembaruan, dan alamat pengunduhan. Di sini saya kira saya mengunggahnya ke http://2ccc.com/update.txt.
Kami kemudian menggunakan komponen TNMHTTP untuk mendapatkan konten file ini dari situs web:
fungsi TForm1.GetUpdateText:String;
mulai
NMHTTP1.InputFileMode := SALAH;
NMHTTP1.OutputFileMode := SALAH;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.Get('http://2ccc.com/update.txt'); {Dapatkan teks situs web}
Hasil:=NMHTTP1.Body;
akhir;
Setelah mendapatkan teksnya, kita perlu memisahkan informasinya. Saya menggunakan fungsi berikut:
fungsi TForm1.AnalyseUpdate(Badan:String;var Pembaruan:TUpdate):Boolean;
var
TmpStr,Ver:String;
fungsi CenterStr(Src:String;Sebelum,Setelah:String):String;
{ Fungsi ini digunakan untuk memisahkan string di tengah dua string.
Misalnya..('DelphiBox.com','Delphi','.com')=>'Kotak'. }
var
Pos1,Pos2:Kata;
mulai
Pos1:=Pos(Sebelum,Src)+Panjang(Sebelum);
Pos2:=Pos(Setelah,Src);
Hasil:=Salin(Src,Pos1,Pos2-Pos1);
akhir;
mulai
TmpStr:=CenterStr(Body,'update'); {Dapatkan informasi peningkatan antar nama program}
jika TmpStr='' maka
Hasil:=Salah yang lain {Tidak dapat menemukan informasi pemutakhiran file ini}
mulai
Ver:=CenterStr(TmpStr,'<ver>','</ver>');
Pembaruan.Versi:=SeparateVerStr(Ver);
Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>')); { Mengurai tanggal}
Update.URL:=CenterStr(TmpStr,'<url>','</url>'); {Selesaikan alamat pemutakhiran}
Hasil:=Benar;
akhir;
akhir;
Dimana TUpdate adalah format perekaman informasi yang saya tentukan:
TSimpleVersion=record{Informasi versi yang disederhanakan}
dwPRoductVersionMS: DWORD;{versi utama}
dwProductVersionLS: DWORD;{versi kecil}
akhir;
TUpdate=catatan {informasi peningkatan versi}
Nama:String[63];{nama program}
Versi:TSimpleVersion;{version}
Tanggal:Tanggal;{tanggal}
URL:ShortString;{Alamat unduhan}
akhir;
Fungsi SeparateVerStr() mengonversi informasi versi yang ditingkatkan dalam bentuk string menjadi format informasi versi yang disederhanakan:
fungsi SeparateVerStr(s:String):TSimpleVersion;
konstanta
Pemisah='.'; {pikirkan '.'
var
p,v1,v2,v3,v4:KATA;
mulai
jika Panjang(s)=0 maka Keluar;
p:=pos(Pemisah, s);
v1:=StrToInt(salinan(s,1,p-1));
Hapus(s,1,p);
p:=Pos(Pemisah,s);
v2:=StrToInt(salin(s,1,p-1));
Hapus(s,1,p);
p:=Pos(Pemisah,s);
v3:=StrToInt(salinan(s,1,p-1));
Hapus(s,1,p);
v4:=StrToInt(s);
Hasil.dwProductVersionMS:=v1*$10000+v2;
Hasil.dwProductVersionLS:=v3*$10000+v4;
akhir;
Hal terakhir yang harus dilakukan adalah membandingkan informasi versi file dan mendapatkan versi Anda sendiri terlebih dahulu. Saya menggunakan fungsi berikut:
function GetBuildInfo(FName:string):TSimpleVersion; {dapatkan informasi versi sendiri}
var
Ukuran VerInfo: DWORD;
VerInfo: Penunjuk;
Ukuran Nilai Ver: DWORD;
Nilai Ver: PVSFixedFileInfo;
Boneka: DWORD;
mulai
VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '/', Pointer(VerValue), VerValueSize);
dengan VerValue^ lakukan
mulai
Result.dwProductVersionMS := dwFileVersionMS; {versi utama}
Result.dwProductVersionLS := dwFileVersionLS; {versi kecil}
akhir;
FreeMem(VerInfo, VerInfoSize);
akhir;
Kemudian gunakan fungsi berikut untuk membandingkan versi situs web yang ditingkatkan dengan versi saat ini. Jika TRUE dikembalikan, berarti ada versi file yang baru:
fungsi VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean;
mulai
jika (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) maka
mulai
Hasil:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS;
akhiri yang lain
mulai
Hasil:=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS
akhir;
akhir;