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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    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 395
    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 081
    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 081
    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 395
    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 395
    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 395
    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 395
    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
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 923
    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 395
    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 395
    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.

+ 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