IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

[D5] Détection d'une nouvelle version à distance


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Points : 66
    Points
    66
    Par défaut [D5] Détection d'une nouvelle version à distance
    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.

    @+

  2. #2
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    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
    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>
    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.

    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Points : 66
    Points
    66
    Par défaut
    Salut!
    Excuse moi pour ma réponse tardive!
    Actuelement je gère mes versions dans un fichier ini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [VERSION]
    VersionScripts=4.00
    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.
    Ton aide m'intéresse.
    Merci d'avance.

    A très bientôt!

  4. #4
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Points : 66
    Points
    66
    Par défaut
    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 !

  6. #6
    Membre averti

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Points : 441
    Points
    441
    Par défaut
    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)

    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;
    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)

    J'espère que ça va t'aider

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Points : 66
    Points
    66
    Par défaut
    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!

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. IBM annonce une nouvelle version de DB2
    Par Fleur-Anne.Blain dans le forum DB2
    Réponses: 1
    Dernier message: 19/07/2009, 21h36
  2. [news] Une nouvelle version de RarMachine
    Par aodix dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 26/01/2009, 11h27
  3. Réponses: 1
    Dernier message: 10/12/2007, 16h33
  4. déclarer une nouvelle version de Tomcat
    Par keopsk dans le forum JBuilder
    Réponses: 9
    Dernier message: 02/07/2004, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo