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 :

Patch de fichier *.exe qui sont en cours d'exécution


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 22
    Points
    22
    Par défaut Patch de fichier *.exe qui sont en cours d'exécution
    Bonsoir,

    J'ai créé une application qui reçoit des mise à jour via le réseau.

    L'application reçoit bien la mise à jour.
    Par contre, l'application n'arrive pas à modifier le fichier exécutable de l'application car, bien sur, celle-ci est en cours d'exécution.

    Par conséquent, je voudrai savoir comment mon application peut-elle modifier son propre fichier exécutable pendant son exécution ?

    Vous aurez peut-être d'autres proposition à me faire.

    Merci d'avance,

    Jérôme
    Merci d'avance

    Akeix

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    une des solutions consiste à transférer les majeures parties des fonctionnalités de ton application Fiches y compris dans une ou plusieurs DLL
    ton applicatif a pour fonctions uniquement d'appeller des fomctions, fiches contenus dans des DLL
    la Mise à jour est simplifiée puisqu'il suffit alors de libérer la Dll dont une partie doit être modifiée, puis après la modification de recharger cette DLL

    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre averti Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Points : 444
    Points
    444
    Par défaut
    Une auter solution que j'emploi et de copier la nouvelle version à un endroit different. Puis de l'executer, charge à elle de detruire l'application obsoléte et de se recopier à son emplacement.

  4. #4
    Membre à l'essai
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 21
    Points : 22
    Points
    22
    Par défaut
    Bonsoir,

    Pour finir, j'ai trouvé une solution ce matin.

    Elle s'approche de la solution de uriotceo.

    J'ai créé une application (MAJ.exe)

    La voici :
    1 - Mon application 'Client.exe' télécharge la nouvelle version et l'écrit dans un fichier 'patch.bin',
    2 - une fois téléchargées, mon application 'Client.exe' lance via la fonction CreateProcess une application console (MAJ.exe) qui fait la mise à jour.
    3 - Une fois MAJ.exe lancé, mon application 'Client.exe' se termine.
    4 - MAJ.exe attend a fin d'exécution de 'Client.exe' pendant 3 secondes.
    5 - MAJ.exe copie 'patch.bin' en 'Client.exe'
    6 - MAJ.exe supprimer le fichier 'patch.bin"
    7 - MAJ.exe lance de nouveau mon application 'Client.exe' via la fonction CreateProcess.
    8 - MAJ.exe se termine.

    J'espère avoir été clair dans mon explication et que cela pourra aider d'autre personnes

    Merci pour vos réponses (Je n'avais pas pensée à la solution des DLL !)

    Cordialement,

    Jérôme
    Merci d'avance

    Akeix

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Bonjour,
    Etant novice dans ce sujet la je vais avoir du mal à donné une solution
    Toutefois je me suis posé la question aussi pour un autre soft que j'avais créer et qui devais de mettre à jour seul.
    Ce sujet m'interresse et j'aimerais bien connaitre la solution pll (pour information).

    Cordialement.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 61
    Points : 62
    Points
    62
    Par défaut
    Le principe de la mise à jour par DLL consiste à n'utiliser qu'un simple exécutable le plus petit possible. Cet exécutable ne contiendra en fait que 2 choses :

    1) Fonctions de chargement et déchargement de DLL (ou DLLs selon les cas)
    2) Fonctions permettant de vérifier les mises à jour (par Internet par exemple) et de télécharger cette mise à jour.


    Lorsque l'application est exécuté, elle chargera ses données (fenêtres et data et autes) contenu dans sa DLL. Puis l'application peut vérifier périodiquement les mises à jour, si une nouvelle version est disponible, elle télécharge le nouveau fichier (cette mise à jour sera sous la forme d'une DLL également). Ensuite il suffit de décharger la DLL résidente, de supprimer du disque dur cette DLL, de renommer le fichier télécharger, et ensuite de le recharger. Voilà une application mise à jour. :p

    Je pense même que les fonctions de mise àjour et téléchargement peuvent être contenues dans la DLL. Ainsi il suffit de coder dans l'exécutable que le système de chargement/déchargement de DLL, et biensur l'appel à la fonction principale.

    Voilà j'espère que c'est assez clair.

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 149
    Points : 77
    Points
    77
    Par défaut
    Ok
    Ca l'air super interressant comme methode.
    Merci beaucoup

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

Discussions similaires

  1. Fichier .exe qui s'ouvre avec Shell, mais ne s'exécute pas
    Par choux22 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 21/12/2010, 15h27
  2. Supprimer des fichier qui sont vieux d'une semaine
    Par islyoung2 dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 20/09/2009, 19h32
  3. [MySQL] Ecouter les fichier mid qui sont dans la base mysql
    Par rane dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/02/2008, 17h12
  4. Ecrire dans un fichier .exe en cours d'éxécution.
    Par ValyGator dans le forum Windows
    Réponses: 14
    Dernier message: 07/12/2006, 15h20
  5. [vb6]:Recuperer les caracteres qui sont dans un fichier text
    Par flav66 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/10/2006, 08h44

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