De plus en plus de programmes prennent en charge les fonctions de mise à niveau en ligne. Cet article explique comment obtenir des informations de mise à niveau à partir du site Web. Ici, j'utilise principalement les informations de version pour détecter si je dois télécharger une version mise à niveau.
Le principe général est le suivant :
1. Placez un texte d'information sur le site Web.
2. Utilisez TNMHTTP pour obtenir le contenu textuel du texte d'information du site Web.
3. Analysez les informations requises pour l'analyse du texte.
4. Comparez les versions du programme pour fournir des informations de mise à niveau.
Tout d'abord, nous plaçons un texte d'information sur notre site Web. Ce texte a son propre format de fichier. J'ai défini le format suivant :
[mise à jour]
<ver>1.79.9.25</ver>
<url>http://delphibox.com/softm/3_update.zip</url>
<date>2002-9-25</date>
[/mise à jour]
Nous pouvons l'enregistrer sous forme de fichier update.txt et utiliser l'identifiant []<> pour classer les informations, qui incluent le nom du programme, la version, la date de mise à jour et l'adresse de téléchargement. Ici, je suppose que je le télécharge sur http://2ccc.com/update.txt.
Nous utilisons ensuite le composant TNMHTTP pour récupérer le contenu de ce fichier depuis le site Web :
fonction TForm1.GetUpdateText:String;
commencer
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
NMHTTP1.Get('http://2ccc.com/update.txt'); {Obtenir le texte du site Web}
Résultat :=NMHTTP1.Body ;
fin;
Après avoir obtenu le texte, nous devons séparer les informations. J'ai utilisé la fonction suivante :
function TForm1.AnalyseUpdate(Body:String;var Update:TUpdate):Boolean;
var
TmpStr,Ver:String;
fonction CenterStr(Src:String;Avant,Après:String):String;
{ Cette fonction est utilisée pour séparer la chaîne au milieu de deux chaînes.
Par exemple...('DelphiBox.com','Delphi','.com')=>'Box'. }
var
Pos1,Pos2 : Mot ;
commencer
Pos1:=Pos(Avant,Src)+Longueur(Avant);
Pos2:=Pos(Après,Src);
Résultat :=Copie (Src,Pos1,Pos2-Pos1);
fin;
commencer
TmpStr:=CenterStr(Body,'update'); {Obtenir les informations de mise à niveau entre les noms de programmes}
si TmpStr='' alors
Résultat :=False else {Impossible de trouver ces informations de mise à niveau de fichier}
commencer
Ver:=CenterStr(TmpStr,'<ver>','</ver>');
Update.Version :=SeparateVerStr(Ver); {version d'analyse}
Update.Date:=StrToDate(CenterStr(TmpStr,'<date>','</date>'));
Update.URL:=CenterStr(TmpStr,'<url>','</url>'); {Résoudre l'adresse de mise à niveau}
Résultat :=Vrai ;
fin;
fin;
Où TUpdate est le format d'enregistrement des informations que j'ai défini :
TSimpleVersion=record{Informations de version simplifiées}
dwPRoductVersionMS : DWORD ; {version majeure}
dwProductVersionLS : DWORD ; {version mineure}
fin;
TUpdate=enregistrer {informations de mise à niveau}
Nom :String[63];{nom du programme}
Version :TSimpleVersion ;{version}
Date :TDate ;{date}
URL : ShortString ; {Adresse de téléchargement}
fin;
La fonction SeparateVerStr() convertit les informations de version mise à niveau sous forme de chaîne dans un format d'informations de version simplifié :
fonction SeparateVerStr(s:String):TSimpleVersion;
const
Séparateur='.'; {pensez à '.'
var
p,v1,v2,v3,v4:MOT ;
commencer
si Longueur(s)=0 alors Quittez ;
p:=pos(Séparateur, s);
v1:=StrToInt(copie(s,1,p-1));
Supprimer(s,1,p);
p:=Pos(Séparateur,s);
v2:=StrToInt(copie(s,1,p-1));
Supprimer(s,1,p);
p:=Pos(Séparateur,s);
v3:=StrToInt(copie(s,1,p-1));
Supprimer(s,1,p);
v4:=StrVersInt(s);
Résultat.dwProductVersionMS :=v1*$10000+v2 ;
Résultat.dwProductVersionLS:=v3*$10000+v4;
fin;
La dernière chose à faire est de comparer les informations de version des fichiers et d'obtenir d'abord votre propre version. J'utilise la fonction suivante :
function GetBuildInfo(FName:string):TSimpleVersion; {obtenir ses propres informations de version}
var
Taille VerInfo : DWORD ;
VerInfo : pointeur ;
VerValueSize : DWORD ;
VerValue : PVSFixedFileInfo ;
Factice : DWORD ;
commencer
VerInfoSize := GetFileVersionInfoSize(PChar(FName), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '/', Pointeur(VerValue), VerValueSize);
avec VerValue^ faire
commencer
Résultat.dwProductVersionMS := dwFileVersionMS ; {version majeure}
Résultat.dwProductVersionLS := dwFileVersionLS ; {version mineure}
fin;
FreeMem(VerInfo, VerInfoTaille);
fin;
Utilisez ensuite la fonction suivante pour comparer la version mise à niveau du site Web avec la version actuelle. Si TRUE est renvoyé, cela signifie qu'il existe une nouvelle version du fichier :
fonction VersionCheck(OriVer,NewVer:TSimpleVersion):Boolean;
commencer
si (OriVer.dwProductVersionMS=NewVer.dwProductVersionMS) alors
commencer
Résultat :=OriVer.dwProductVersionLS<NewVer.dwProductVersionLS ;
fin sinon
commencer
Résultat :=OriVer.dwProductVersionMS<NewVer.dwProductVersionMS
fin;
fin;