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

C++Builder Discussion :

Mise a jour d'une application par elle-même. [Langage/Algorithme]


Sujet :

C++Builder

  1. #1
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut Mise a jour d'une application par elle-même.
    Bonjour,

    j'ai besoin qu'une application (limitée à un .exe) puisse par elle-même se mettre à jour.

    Pour cela, le code a l'ouverture détecte une mise à jour si elle existe et lance cette mise à jour par ShellExecute puis se ferme.

    Etant donné que l'update doit faire un copy-replace de l'application de base, le fichier applicatif étant en local pur, comment puis-je m'assurer de manière propre et efficace que mon Programme Appelant (l'applicatif qui vient de lancer la mise à jour et qui doit s'être fermé) est bien inactif et que mon copy-replace va donc fonctionner sans heurt.

    Mes seules idées sont de faire juste un petit wait en début d'update pour s'assurer que l'appelant a eu le temps de se fermer, ou de tester le résultat du copy-replace (je n'ai pas encore faire de recherche sur la méthode à utiliser pour ce copy-replace).

    Si vous avez des suggestions, je suis preneur.

    En fait, il n'y a peut-être rien de spécial à mettre en oeuvre vu que l'applicatif est léger et se ferme très rapidement.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 090
    Par défaut
    Un Programme Delete Lui Meme, dans une optique similaire, j'ai aussi écrit une petite procédure de Mise à jour d'un Exe depuis le réseau local
    Cela peut s'adapter à un FTP ou autre ...

    l'idée, c'est de générer un fichier BAT à la volée (tu peux aussi faire un VBS)
    une fois la BAT lancé, ton programme se termine tout seul, le Bat continue sa vie, sa 1ère tache est de renommer le vieille exe (en boucle) tant qu'il ne peut pas c'est que l'exe tourne, puis de prendre la nouvelle version téléchargée de la renommer avec le nom de la version courante, puis de la lancer ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Excellentissime.

    Et vu que je suis un peu cinglé, je vais tenter ce code en C++ dans l'applicatif lui-même (l'update) qui serait appelé avec des parms specifiques pour l'update. (Du genre Proc *UPDATE, old_Fullname, New_Fullname)
    Why not !!

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Voilà, grâce à mon autre post (ShellExecute), je suis parvenu quasi au bout de mes peines.

    Il me reste un tout petit problème.

    Je ne trouve pas le code pour quitter l'application VCL qui lance l'update de manière automatique (sans intervention clavier).
    J'ai essayé de Simuler mais cela ne fonctionne pas.

    --------Edit------
    Trouvé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application->Terminate();

  5. #5
    Membre très actif Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    924
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 924
    Par défaut
    Ce que je fais dans ces cas là, c'est :
    (par exemple avec une fichier toto.exe)

    1 - l'Exe renomme som propre fichier (tu peux le faire, la suppression n'est pas possible mais renommer oui). ce qui implique que le code en mémoire va pointer sur ce fichier renommé (par exemple "toto_old.exe")
    2 - je copie (depuis l'ancienne version) la nouvelle version sous le nom original toto.exe
    3 - je lance, (depuis l'ancienne version) "toto.exe"
    4 - je ferme le programme en cours (pointant sur toto_old.exe) (avec un Application->Terminate() par exemple mais un close de la form principale DOIT marcher).
    5 - Depuis la nouvelle version, j'efface l'éventuel toto_old.exe qui traine.

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour Nirgal76,

    j'ai fait ceci :
    1) L'exe appelle le nouveau (New_exe) avec des params spécial Update ainsi que les params courant passé en fin.
    2) L'exe se termine par Application->Terminate();
    3) Le nouveau (new_exe) se copie à la place de l'ancien et affiche un message d'update ok.
    4) Le nouveau extrait les parametres d'origine d'appel de l'ancien et appelle maintenant le nouveau mis en place avec les parms d'origine.
    5) Le nouveau qui s'est occupé de l'update/install se termine par Application->Terminate();
    6) Le nouveau code mis en place s'execute normallement.

    Et quand on appele le nouveau sans parametre, il propose de s'installer si ce n'est pas encore fait.

    Ca marche plutôt bien.

  7. #7
    Membre très actif Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    924
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 924
    Par défaut
    C'est un peu plus long (tu utilise 2 exécutions du nouveau, avec des paramètres différents donc 2 types d'exécutions à prévoir, pour arriver à tes fins) mais bon, effectivement, c'est encore une autre solution.
    (Dans ma solution, comme c'est l'ancien qui lance le nouveau et une seule fois, il le lance directement avec la ligne de commande qu'il (l'ancien) avait reçu pour être lancé)
    J'avais vu des composants qui permettait de faire de l'update comme ça, y compris depuis un ftp ou le web. je crois même que certains étaient gratuit. mais c'est plus drôle de le faire soi même

  8. #8
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    c'est plus drôle de le faire soi même


    Surtout on apprend pas mal de choses.

    Je n'avais pas pensé à ta technique, à vrai dire, et elle est plutôt intéressante.

    Je ne sais pas si elle est capable de prendre en charge l'Auto installation par simple ouverture (appel sans parametre) vu ton point 1, car chez moi, l'executable modifié se trouve sur un réseau et ne peut être renommé.

    Il y a 2 fonctionnalités possibles :
    1) L'appli en local va scanner le réseau et propose l'installation d'un update si elle en trouve 1
    2) Lappel direct de l'appli sur le réseau (version à jour) propose l'auto installation si pas installé ou pas à jour.

    J'aurais aussi pu me contenter d'1 simple appel au proc sur le réseau pour combiner à la fois la mise à jour et l'exécution mise à jour, mais j'ai préféré un appel supplémentaire au code mis en place pour vérifier que tout est en ordre.

    Il faut dire que je débute en C++ (et Builder) alors, je me montre prudent

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

Discussions similaires

  1. Faire une mise a jour d'une application en c#
    Par redox87 dans le forum C#
    Réponses: 3
    Dernier message: 20/04/2009, 17h55
  2. [GeoTools] Mise a jour d'une application
    Par eclesia dans le forum SIG : Système d'information Géographique
    Réponses: 1
    Dernier message: 19/04/2009, 16h54
  3. Réponses: 2
    Dernier message: 22/12/2008, 15h29
  4. Mise a jour d'une application
    Par Poulain dans le forum Dreamshield
    Réponses: 15
    Dernier message: 18/01/2008, 21h05
  5. Réponses: 4
    Dernier message: 12/03/2007, 16h14

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