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

  1. #1
    Membre actif Avatar de declencher
    Inscrit en
    mai 2003
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 417
    Points : 247
    Points
    247

    Par défaut Notification de mise à jour pour mon appli

    Salut à tous,

    J'aimerai ajouter à mon programme un système permettant de notifier l'utilisateur qu'une mise à jour est disponible. Auriez vous un tuto, ou une piste vers laquelle je pourrai m'orienter pour faire ça proprement et sans risque de sécurité ?

    Merci !

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 609
    Points : 2 404
    Points
    2 404

    Par défaut

    un fichier texte sur un ftp qui sera lu au lancement du programme ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 485
    Points : 23 026
    Points
    23 026
    Billets dans le blog
    13

    Par défaut

    Bonjour,

    il y a la possibilité de TMS UPDATE
    perso, j'utilise une variante proposée par papy214 comme mes programmes utilisent une base de données, j'enregistre pour chaque programme un GUID dans ma BDD.
    Chaque mise à jour a un GUID différent donc quand je teste par rapport à la BDD je demande s'il faut appliquer la mise à jour et dans ce cas : chargement par ftp
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Berlin, Tokyo) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2007
    Messages
    2 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2007
    Messages : 2 609
    Points : 2 404
    Points
    2 404

    Par défaut

    il y a 2 ans, j'avais utilisé WyBuild qui fonctionnait pas mal et assez simple à utiliser : https://wyday.com/wybuild/
    De mémoire, ce n'était pas onéreux.
    Mais l'équivalent TMS est peut-être tout simple, je ne le connais pas.

  5. #5
    Membre actif Avatar de declencher
    Inscrit en
    mai 2003
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 417
    Points : 247
    Points
    247

    Par défaut

    Salut,

    Merci pour vos réponses. Je me demandais si je ne pouvais pas mettre un fichier texte sur mon serveur web qui contiendrait la version courante...
    Mais je ne sais pas comment m'y prendre...

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    9 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 485
    Points : 23 026
    Points
    23 026
    Billets dans le blog
    13

    Par défaut

    Bonjour,

    j'ai retrouvé ce code d'une application D2010. Pour ce programme la version sous forme d'un GUID est stockée dans le fichier ini avec les infos de connexion ftp, tout ce qui est user et mot de passe est retrouvé/calculé dans le programme
    [Base]
    IpAdress = .............
    [Version]
    key={EB517881-A5D3-42A8-9FE8-8019FBEF0407}
    Bien sûr version pourrait être une constante dans le programme ou contenu dans les options du projet (j'ai fait un post à ce sujet je crois)

    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
     
    // dans formcreate
    // Charge le fichier contenant le numéro de version
    with idftp1 do
     begin
       Host:=Datamodule1.Base.HostName;
       if Length(Trim(Host))>0 then
        begin
          UserName:=CstUsers[0]+CstUsers[1];
          passWord:=Spell(cstUsers[2]+cstUsers[3],false);
          try
          Connect;
          Get('PatchNumber.TXT','PATCHNUMBER.TXT',true);
          Disconnect;
          PatchPossible:=True;
          except
            PatchPossible:=False;
          end;
         end;
     end;
    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
     
    procedure TMain.FormActivate(Sender: TObject);
    var F : TextFile;
        V : AnsiString;
        DForm : TDownload;
    begin
    ....
      if NOT PatchPossible  then exit;
      AssignFile(F,'PATCHNUMBER.TXT');
      Reset(F);
      ReadLn(F,V);
      CloseFile(F);
      if (V<>Version) then
        begin
          DForm:=TDownLoad.Create(Self);  // TDownload Forme demandant si l'utilisateur veut télécharger et appliquer le patch
          try
            DForm.idFtp1.UserName:=idFtp1.UserName;
            DForm.idFtp1.Host:=idFtp1.Host;
            DForm.idFtp1.PassWord:=idFtp1.PassWord;
            DForm.BringToFront;
            if DForm.ShowModal=mrYes then
             begin
              ShellExecute(0,nil,'patch.exe','/SILENT',nil,SW_HIDE); // programme setup de l'application (innosetup), à la fin du setup l'application est relancée 
              Application.Terminate; // ferme l'application pour appliquer la maj 
             end
            else PatchPossible:=False;
          finally
            DForm.Free;
          end;
        end;
    ...
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // Code de téléchargement du programme setup patch.exe 
    procedure TDownload.BitBtn1Click(Sender: TObject);
    begin
    Idftp1.UserName:=CstUsers[0]+CstUsers[1];
    Idftp1.passWord:=Spell(cstUsers[2]+cstUsers[3],false); 
    Idftp1.Connect;
    Progressbar1.Max:=idftp1.Size('PATCH.EXE');
    idFtp1.Get('PATCH.EXE','PATCH.EXE',true);
    idftp1.Disconnect;
    modalResult:=mrYes;
    end;
    dans le script innosetup (l'application se nomme Suivi.exe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    .........
    [INI]
    Filename: "{src}\Suivi.ini"; Section: "Version"; Key: "key"; String: "{{D5EE70A3-075F-489C-9AB9-2F1F6708A038}"   // met le nouveau n°de version dans le fichier ini
     
    ...
    [Run]   // exécution après installation (en FRAnçais ou en ENN (anglais Inde) selon la langue d'installation 
    Filename: "{src}\Suivi.exe"; Parameters: "FRA"; Flags: postinstall; Languages: french
    Filename: "{src}\Suivi.exe"; Parameters: "ENN"; Flags: postinstall; Languages: english
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Berlin, Tokyo) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 559
    Points : 5 934
    Points
    5 934

    Par défaut

    Citation Envoyé par declencher Voir le message
    Merci pour vos réponses. Je me demandais si je ne pouvais pas mettre un fichier texte sur mon serveur web qui contiendrait la version courante...
    Mais je ne sais pas comment m'y prendre...
    Par contre toi, tu sembles vouloir le cas le plus simple : la dernière version complète
    La version la plus complexe c'est versions incrémentales/ patches + gestion des versions intermédiaires (par exemple, des fois tu ne peux pas passer à la version X + 5 parce qu'il faut la version X + 3)


    Moi j'ai commencé à faire un système similaire
    J'avais un serveur, où je stockais : la dernière version, un fichier json/ XML (pour me renseigner du lien de la dernière version, et d'autres informations comme la version par exemple) et le md5 de ce fichier (c'est un fichier qui contient juste le md5).

    Et à chaque fois que l'application est lancée, je téléchargeais le md5 du serveur et je faisais une comparaison avec le md5 courant stocké en base de données :
    • C'est à toi de voir, si c'est à chaque ouverture, ou toutes les x3, x5. Ou alors ton application reste toujours ouverte et là il faut avoir une alerte tous les X temps
    • Le md5 est dans un premier temps, un bon moyen pour télécharger une indicateur très rapidement
    • Au premier lancement de ton application, il faut que l'application puisse connaître le md5. Donc le mettre en dur dans le code (pour initialiser la base de données) et le changer à chaque nouvelle version (un peu pénible)
    • Si le md5 ne correspond pas, il faut 1) télécharger et parser le deuxième fichier json/ XML pour pouvoir télécharger la bonne version 2) changer le md5 stocké en base de données + d'autres informations que contient le deuxième fichier


    Par contre tu ne peux pas remplacer l'exécutable en cours d'exécution par le nouveau Donc, les solutions que je vois :
    • Tu affiches une boîte de dialogue/ alerte qui demande à l'utilisateur de télécharger et d'installer lui même la version la plus à jour.
    • Tu fais 2 exécutables : un chargeur et ton application. Le chargeur est exécuté en premier et servira juste à 1) parcourir les dossiers/ fichiers du dossier racine de l'application et à lancer le bon exécutable 2) vérifier le md5 et télécharger la bonne version 3) peut-être qu'il peut supprimer/ archiver les vieilles versions. Par contre tu peux mettre en place un bouton "Mettre à jour" dans ton application qui 1) vérifie le md5 2) télécharge la nouvelle version 3) lance le chargeur 4) quitte// exit(0)
    • Mettre tout le code dans une dll et 1) télécharger la nouvelle 2) décharger l'ancienne 2 bis) supprimer/ archiver l'ancienne 3) charger la nouvelle

  8. #8
    Membre actif Avatar de declencher
    Inscrit en
    mai 2003
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 417
    Points : 247
    Points
    247

    Par défaut

    Bonjour,

    Merci pour vos réponses. Je vais continuer mes recherches.

    En fait je n'ai pas forcément besoin d'automatiser la mise à jour. Je souhaitais dans un premier temps afficher "une mise à jour est disponible", et quand l'utilisateur clique sur le PC, son navigateur se lance et affiche la page de téléchargement.

    C'est basique mais je trouvais ça suffisant dans un premier temps :p

  9. #9
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    mars 2010
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 678
    Points : 1 602
    Points
    1 602
    Billets dans le blog
    4

    Par défaut

    Si tu veux vraiment faire simple tu peux avoir une page sur ton site qui contient le numéro de la version.
    Si la version du logiciel est différent de celle sur la page tu peux afficher ton message.

    Avec le TIdHTTP tu peux faire un Get sur ton URL et récupérer le contenu directement dans un string.

    Une autre solution est d'utiliser un WebService qui pourrait te renvoyer un objet avec le numéro de la dernière version, la date de mise en ligne, l'url de téléchargement etc..

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    7 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 7 053
    Points : 22 770
    Points
    22 770

    Par défaut

    personnellement mes applications récupèrent leur numéro de version et calculent le HASH MD5, ces deux infos sont envoyé à un site web qui au besoin renvoie une mise à jour...dans ton cas ça peut être un simple "OK" ou "MAJ"

    cela présente plusieurs avantages:

    - le MD5 m'indique si l'exe a été modifié même si sa version n'a pas changée (c'est partique pour forcer deux mises à jour sans changer de version)
    - c'est le site qui décide s'il y a une mise à jour (possibilité de revenir à la version n-1 en cas de gros bug)
    - je peux faire un suivi des postes installés
    - si possible un nom d'utilisateur (dans l'appli par exemple) afin d'identifier le poste, je peux alors choisir quelle version doit être diffusée et où
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  11. #11
    Membre actif Avatar de declencher
    Inscrit en
    mai 2003
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 417
    Points : 247
    Points
    247

    Par défaut

    Salut,

    @retwas : j'ai commencé mes recherches dans ce sens.

    @Paul : merci pour ces précisions. Je vais inclure le md5 dans le contrôle.

  12. #12
    Membre actif Avatar de declencher
    Inscrit en
    mai 2003
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 417
    Points : 247
    Points
    247

    Par défaut

    Salut,

    Je suis en train de tester mon code. Je suis parti sur un fichier XML déposé sur un serveur web, 2 balises (md5 et version) et je récupère ce fichier avec TidHTTP.

    Merci pour votre aide.

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

Discussions similaires

  1. Mise à jour de mon RTE (rich texte editor)
    Par mitch46000 dans le forum Fichiers
    Réponses: 3
    Dernier message: 23/05/2006, 10h48
  2. Récupérer des resultats Google pour mon appli ?
    Par Bruno13 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/03/2006, 18h57
  3. Créer .bat pour mise à jour de mon antivirus
    Par ardamus dans le forum Windows
    Réponses: 1
    Dernier message: 17/02/2006, 11h41
  4. Quelle version de delphi 7 pour mon appli ?
    Par /* jerome */ dans le forum EDI
    Réponses: 4
    Dernier message: 13/10/2005, 16h16
  5. [Debutant(e)]mise à jour de mon formulaire via JSP
    Par kouadjalain dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 11/08/2004, 15h43

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