Bonjour,
Je chercher à réaliser un petit module(genre webservice dotnet??) qui me détecte si il existe une nouvelle version de mon application.
Je pense que ce genre de module c/s existe.
Merci d'avance pour votre aide.
@+
Bonjour,
Je chercher à réaliser un petit module(genre webservice dotnet??) qui me détecte si il existe une nouvelle version de mon application.
Je pense que ce genre de module c/s existe.
Merci d'avance pour votre aide.
@+
tu veux le faire absolument en webservice ?
J'ai fait un petit système de mise à jour très simple, et qui marche pas mal
Je stocke sur mon site web un fichier xml de cette forme
Ensuite, via le logiciel, je vais rechercher la version dans le xml, et la comparer avec la version actuelle du logiciel. Si la version est plus récente, la mise est jour est téléchargée et installée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <Updates> <Version name='phoenix'>2001</Version> <Version name='gryphon'>1000</Version> </Updates>
Je crois que tu essaies de faire quelque chôse de plus compliqué pour pas grand chôse. Si mon bout de code t'intéresse, je le posterai ici
Salut!
Excuse moi pour ma réponse tardive!
Actuelement je gère mes versions dans un fichier ini :
Mon appli est mise à jour à partir de scripts sql : je gère uniquement le blocage de l'application si l'utilisateur essaie de mettre à jour son ancienne version (N-2) avec les scripts de la version N.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [VERSION] VersionScripts=4.00
Ton aide m'intéresse.
Merci d'avance.
A très bientôt!
Juste pour savoir : c'est ton application "client" qui doit demander la mise à jour ? Elle télécharge automatiquement les fichiers nécessaire, ou c'est l'utilisateur qui doit le faire manuellement (après notification) ?
Ma solution ne fait qu'interroger un fichier xml sur un "bête" serveur web. Je demande ces précisions car il se peut que je soie à côté de la plaque
Dans mon appli, une fois que mon client a vérifié que la version peut être mise à jour, l'utilisateur met à jour la base de données avec les nouveaux scripts.
En fait, j'aimerai le faire évouler vers une mise à jour du style de celle utilisée par MS AntiSpyware qui va chercher sur un serveur distant si il y a de nouvelles définitions de spyware / nouvelle version du programme.
Voilà.
J'espère que j'ai été clair !
Ok, je l'avais bien compris C'est vrai qu'on peut le faire par un service web, mais je crois que c'est sortir l'artillerie lourde pour rien ^L^
J'ai utilisé Indy et OmniXML pour faire mon système de mise à jour. Je sais que omniXML est utilisable sur Delphi 5, par contre je ne sais pas pour Indy (v9 dans mon cas)
Voilà, j'ai volontairement éliminé le code superflu. Mon fichier xml contient plusieurs infos, telle que la version à jour, et le chemin de téléchargement (au cas où il y aurait des miroirs)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 uses omniXML, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdAntiFreezeBase, IdAntiFreeze, IdException; type TAboutBox = class(TForm) IdHTTP1: TIdHTTP; IdAntiFreeze1: TIdAntiFreeze; ... function ApplicationVersion: String; procedure getUpdate; procedure download(upd : String); ... end; implementation const path : String = 'http://xxxxxx.be/'; //url du serveur. Le fichier xml sera stocké à la racine du site. {procédure de téléchargement de nouvelle version } procedure TAboutBox.download(upd : String); var Fs : TFileStream; begin ProgressBar1.Visible :=true; Button1.Visible :=false; Fs := TFileStream.Create(Main.AppliPath+'patch.exe',fmCreate); //Nom du fichier local with IdHTTP1 do try try //URL du fichier à télécharger Get(upd ,Fs); except On E : EIdException do ShowMessage(Format(LangManager.ConstantValue['RsDownloadError'],[E.Message])); On E : Exception do ShowMessage(Format(LangManager.ConstantValue['RsUnknownError'],[E.Message])); end; finally Fs.Free; //Liberer le flux end; ShowMessage(LangManager.ConstantValue['RsRestartRequired']); end; {procédure de recherche de nouvelle version} procedure TAboutBox.getUpdate ; var version, upd : integer; xml: IXMLDocument; url: String; begin version := StrToInt(AnsiReplaceStr(ApplicationVersion, '.', '')) ; xml := CreateXMLDoc; xml.LoadXML(IdHTTP1.Get(path+'version.xml')); //on récupère le fichier xml upd := StrToInt(xml.SelectSingleNode('//Version').Text); url := xml.selectSingleNode('//Path').Text; if version < upd then begin if MessageDlg(LangManager.ConstantValue['RsUpdateNeeded'],mtInformation, [mbYes, mbNo],0) = mrYes then download(url); end else ShowMessage(LangManager.ConstantValue['RsNoUpdateNeeded']); end; function TAboutBox.ApplicationVersion: String; var VerInfoSize, VerValueSize, Dummy: DWord; VerInfo: Pointer; VerValue: PVSFixedFileInfo; begin VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy); {Deux solutions : } if VerInfoSize <> 0 then {- Les info de version sont inclues } begin {On alloue de la mémoire pour un pointeur sur les info de version : } GetMem(VerInfo, VerInfoSize); {On récupère ces informations : } GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); {On traite les informations ainsi récupérées : } with VerValue^ do begin Result := IntTostr(dwFileVersionMS shr 16); Result := Result + '.' + IntTostr(dwFileVersionMS and $FFFF); Result := Result + '.' + IntTostr(dwFileVersionLS shr 16); Result := Result + '.' + IntTostr(dwFileVersionLS and $FFFF); end; {On libère la place précédemment allouée : } FreeMem(VerInfo, VerInfoSize); end else {- Les infos de version ne sont pas inclues } {On déclenche une exception dans le programme : } raise EAccessViolation.Create(LangManager.ConstantValue['RsNoInfoVersion']); end;
J'espère que ça va t'aider
Merci pour ton taf c'est amplement suffisant !!
Je crois savoir que les composants Indy sont utilisables sur delphi 5.
Je te tiens au courant!
@+
Partager