Immer mehr Programme unterstützen Online-Upgrade-Funktionen. In diesem Artikel erfahren Sie, wie Sie Upgrade-Informationen von der Website erhalten. Hier verwende ich hauptsächlich Versionsinformationen, um festzustellen, ob ich eine aktualisierte Version herunterladen muss.
Das allgemeine Prinzip lautet wie folgt:
1. Informationstext auf der Website platzieren.
2. Verwenden Sie TNMHTTP, um Textinhalte aus Website-Informationstexten abzurufen.
3. Analysieren Sie die für die Textanalyse erforderlichen Informationen.
4. Vergleichen Sie Programmversionen, um Upgrade-Informationen bereitzustellen.
Zuerst platzieren wir einen Informationstext auf unserer Website. Dieser Text hat ein eigenes Dateiformat.
[aktualisieren]
<ver>1.79.9.25</ver>
<url>http://delphibox.com/softm/3_update.zip</url>
<date>25.9.2002</date>
[/aktualisieren]
Wir können es als update.txt-Datei speichern und die Kennung []<> verwenden, um die Informationen zu klassifizieren, zu denen der Programmname, die Version, das Aktualisierungsdatum und die Download-Adresse gehören. Hier lade ich es vermutlich auf http://2ccc.com/update.txt hoch.
Anschließend verwenden wir die TNMHTTP-Komponente, um den Inhalt dieser Datei von der Website abzurufen:
Funktion TForm1.GetUpdateText:String;
beginnen
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.Get('http://2ccc.com/update.txt'); {Website-Text abrufen}
Ergebnis:=NMHTTP1.Body;
Ende;
Nachdem wir den Text erhalten haben, müssen wir die Informationen trennen. Ich habe die folgende Funktion verwendet:
function TForm1.AnalyseUpdate(Body:String;var Update:TUpdate):Boolean;
var
TmpStr,Ver:String;
function CenterStr(Src:String;Before,After:String):String;
{ Diese Funktion wird verwendet, um die Zeichenfolge in der Mitte zweier Zeichenfolgen zu trennen.
Zum Beispiel...('DelphiBox.com','Delphi','.com')=>'Box'. }
var
Pos1,Pos2:Wort;
beginnen
Pos1:=Pos(Before,Src)+Length(Before);
Pos2:=Pos(After,Src);
Ergebnis:=Copy(Src,Pos1,Pos2-Pos1);
Ende;
beginnen
TmpStr:=CenterStr(Body,'update'); {Upgrade-Informationen zwischen Programmnamen abrufen}
if TmpStr='' dann
Ergebnis:=False else {Diese Dateiaktualisierungsinformationen können nicht gefunden werden}
beginnen
Ver:=CenterStr(TmpStr,'<ver>','</ver>');
Update.Version:=SeparateVerStr(Ver); {parse version}
Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>'));
Update.URL:=CenterStr(TmpStr,'<url>','</url>'); {Upgrade-Adresse auflösen}
Ergebnis:=True;
Ende;
Ende;
Wobei TUpdate das Aufzeichnungsformat der von mir definierten Informationen ist:
TSimpleVersion=record{Vereinfachte Versionsinformationen}
dwPRoductVersionMS: DWORD;{Hauptversion}
dwProductVersionLS: DWORD;{Nebenversion}
Ende;
TUpdate=record {Upgrade-Informationen}
Name:String[63];{Programmname}
Version:TSimpleVersion;{version}
Datum:TDate;{date}
URL:ShortString;{Download-Adresse}
Ende;
Die Funktion SeparateVerStr() konvertiert die aktualisierten Versionsinformationen in String-Form in ein vereinfachtes Versionsinformationsformat:
function SeparateVerStr(s:String):TSimpleVersion;
const
Separator='.'; {think '.'
var
p,v1,v2,v3,v4:WORT;
beginnen
wenn Länge(n)=0 dann Beenden;
p:=pos(Separator, s);
v1:=StrToInt(copy(s,1,p-1));
Löschen(s,1,p);
p:=Pos(Separator,s);
v2:=StrToInt(copy(s,1,p-1));
Löschen(s,1,p);
p:=Pos(Separator,s);
v3:=StrToInt(copy(s,1,p-1));
Löschen(s,1,p);
v4:=StrToInt(s);
Ergebnis.dwProductVersionMS:=v1*$10000+v2;
Ergebnis.dwProductVersionLS:=v3*$10000+v4;
Ende;
Als letztes müssen Sie die Versionsinformationen der Dateien vergleichen und zunächst Ihre eigene Version erhalten. Ich verwende die folgende Funktion:
function GetBuildInfo(FName:string):TSimpleVersion {eigene Versionsinformationen abrufen}
var
VerInfoSize: DWORD;
VerInfo: Zeiger;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
beginnen
VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '/', Pointer(VerValue), VerValueSize);
mit VerValue^ tun
beginnen
Result.dwProductVersionMS := dwFileVersionMS; {Hauptversion}
Result.dwProductVersionLS := dwFileVersionLS; {Nebenversion}
Ende;
FreeMem(VerInfo, VerInfoSize);
Ende;
Verwenden Sie dann die folgende Funktion, um die aktualisierte Version der Website mit der aktuellen Version zu vergleichen. Wenn TRUE zurückgegeben wird, bedeutet dies, dass es eine neue Version der Datei gibt:
function VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean;
beginnen
if (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) dann
beginnen
Ergebnis:=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS;
Ende sonst
beginnen
Ergebnis:=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS
Ende;
Ende;