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

ALM Discussion :

Application lancée par un updater.


Sujet :

ALM

  1. #1
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut Application lancée par un updater.
    Bonjour,

    On voit de plus en plus (notamment pour le jeu en ligne) d'application lancée par un updater.
    En clair, on ne lance pas directement l'appli en elle-même, mais un petit programme qui va d'abord vérifier en contactant un serveur distant si tous les composants sont à jour et télécharger puis installer ce qui doit l'être avant d'appeler le programme principal de l'appli.

    Cette partie là ne me pose pas de soucis particulier.

    Par contre, le fonctionnement qui m'intéresse de comprendre, c'est dans le cas où c'est l'updater lui-même qui doit être mis à jour...
    La technique généralement employée est-elle de faire télécharger par l'updater un exécutable qui installera la nouvelle version une fois le premier arrêté ? (Cas dans lequel il faut s'assurer que le premier processus soit bien stoppé avant de pouvoir lancer la copie de fichiers).
    Ou existe-t-il un technique miracle qui m'est encore inconnue ?

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Un processus enfant a une vie indépendante de celle du parent. Donc l'updater détecte qu'il doit être mis à jour, la télécharge, puis crée un autre processus et se ferme. Le second processus guette la fermeture de l'updater et le met à jour, puis le relance.

  3. #3
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Un processus enfant a une vie indépendante de celle du parent. Donc l'updater détecte qu'il doit être mis à jour, la télécharge, puis crée un autre processus et se ferme. Le second processus guette la fermeture de l'updater et le met à jour, puis le relance.
    Non seulement autre processus, mais également autre programme car le fichier d'où vient le code ne doit pas pouvoir être modifié tant que ce code est en train d'être exécuté.

    Il faut donc que le code de mise à jour soit séparé dans 2 programmes différents. Mais si on ne veut pas du tout polluer notre programme principal avec ce code utilitaire, il faut au moins 3 programme.

    Je vois bien un programme lanceur qui vérifie si un fichier du genre "updater.exe.new" existe dans le dossier de l'appli, et, le cas échéant, supprime l'ancienne version puis renomme la nouvelle avant de poursuivre. Sinon il ne fait que lancer l'updater.

    L'updater lui vérifie d'abord s'il est à jour pour savoir s'il doit télécharger sa nouvelle version et redonner la main au lanceur. S'il est à jour il vérifie les versions des modules du programme principal avant de le lancer.


    J'imagine que c'est la bonne marche à suivre, non ?


    Par contre, il faut que lorsque l'updater redémarre le lanceur ce dernier attende la fermeture du premier avant d'initier ses opérations sur les fichiers.
    Qu'existe-t-il comme mécanisme pour qu'un processus soit en attente tant que celui qui l'a appelé n'a pas libéré toutes ses ressources (y compris le fichier contenant son code, donc sa fin de vie) ?

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Mais si on ne veut pas du tout polluer notre programme principal avec ce code utilitaire, il faut au moins 3 programme.
    A la rigueur tu pourrais directement télécharger un exécutable si tu veux éviter d'en avoir un de plus dans le dossier appli. Mais ça posera problème si un jour tu veux des MAJ incrémentales ou ce genre de choses.

    Sinon, à partir de W7 powershell est dispo en standard, tu pourrais te contenter d'un script. Ou avant ça peut-être du VBS. Voire peut-être un bête xcopy planifié via le service de planification de Windows.

    Je vois bien un programme lanceur qui vérifie si un fichier du genre "updater.exe.new" existe dans le dossier de l'appli, et, le cas échéant, supprime l'ancienne version puis renomme la nouvelle avant de poursuivre. Sinon il ne fait que lancer l'updater.
    Tu veux séparer le lanceur de l'updater ? Je ne vois pas trop l'intérêt. A la rigueur sur trois exe j'aurais plutôt choisi lanceur/updater, updater de l'updater, application.

    Qu'existe-t-il comme mécanisme pour qu'un processus soit en attente tant que celui qui l'a appelé n'a pas libéré toutes ses ressources (y compris le fichier contenant son code, donc sa fin de vie) ?
    Je ne pense pas que ce soit la bonne approche car le fichier pourrait ne pas être libéré immédiatement par l'OS. Au final je surveillerais plutôt l'état du fichier que celui du processus, en cherchant à écrire une fois par seconde jusqu'à obtenir l'autorisation ou à expiration d'une durée maximale.

  5. #5
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Tu veux séparer le lanceur de l'updater ? Je ne vois pas trop l'intérêt. A la rigueur sur trois exe j'aurais plutôt choisi lanceur/updater, updater de l'updater, application.
    j'avais penché pour la solution que j'ai détaillé plus tôt parce qu'en cas de problème lors d'une mise à jour qui corromprait l'updater il suffit de remettre la nouvelle version et le lanceur (donc l'updater de l'updater qui est tellement simple qu'il ne devrait jamais ou extrêmement rarement avoir besoin de maj) va rétablir le bon fonctionnement.

    Je pars du principe que l'ordre de lancement doit être inversement proportionnel à la fréquence des mises-à-jour.

    De plus, d'un point de vue logique, on met à jour, puis on redémarre, jusqu'à ce que l'ensemble de l'appli soit à jour. Les mises-à-jour du programme principal ne peuvent pas être téléchargées tant que l'updater n'est pas à la plus récente version.

    Les chemins possibles seraient donc :

    • Tout est déjà à jour : (1) (2) (3)
    • Nouvelle version du programme principal : (1) (2) (3')
    • Nouvelle version de l'updater : (1) (2) (1) (2') (3)
    • Nouvelle version de l'updater et du programme principal : (1) (2) (1) (2') (3')



    Citation Envoyé par DonQuiche Voir le message
    Je ne pense pas que ce soit la bonne approche car le fichier pourrait ne pas être libéré immédiatement par l'OS. Au final je surveillerais plutôt l'état du fichier que celui du processus, en cherchant à écrire une fois par seconde jusqu'à obtenir l'autorisation ou à expiration d'une durée maximale.
    Je prends ça en note, ça m'a l'air d'être une excellente idée.

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par T`lash Voir le message
    j'avais penché pour la solution que j'ai détaillé plus tôt parce qu'en cas de problème lors d'une mise à jour qui corromprait l'updater il suffit de remettre la nouvelle version et le lanceur
    C'est vrai. Par contre il te sera impossible de mettre à jour le lanceur alors que tu pourrais avoir intérêt à le changer, ce qui n'est pas le cas de l'updater de l'updater. Et puis rebelote : en cas de corruption du lanceur tu es marron, qu'il s'agisse d'un pur lanceur ou d'un lanceur/updater.

  7. #7
    Membre confirmé Avatar de T`lash
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Septembre 2007
    Messages : 381
    Points : 519
    Points
    519
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    C'est vrai. Par contre il te sera impossible de mettre à jour le lanceur alors que tu pourrais avoir intérêt à le changer, ce qui n'est pas le cas de l'updater de l'updater. Et puis rebelote : en cas de corruption du lanceur tu es marron, qu'il s'agisse d'un pur lanceur ou d'un lanceur/updater.
    Tu n'as pas compris ce que je disais : le premier lanceur (programme 1 dans la chaîne) c'est lui l'updater de l'updater. Son seul rôle c'est de remplacer l'updater (programme 2) par sa nouvelle version si elle se trouve dans le dossier. C'est de toute façon l'updater qui télécharge toute mise-à-jour se trouvant sur le serveur ; il installe celles du programme principal (3) mais c'est le lanceur qui installe celles de l'updater.

    Le code du lanceur (1) doit être très réduit et ultra simple car dans cette archi c'est le seul composant à ne pas pouvoir être mis à jour automatiquement (donc il faut faire en sorte de ne pas avoir à le modifier).

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/11/2013, 16h16
  2. Dimensions application lancée par ShellExecute
    Par colorid dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2012, 13h43
  3. Réponses: 2
    Dernier message: 06/10/2008, 12h20
  4. Application qui plante quand lancé par sans débugage
    Par bossun dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 12/07/2007, 12h08
  5. Réponses: 9
    Dernier message: 18/06/2007, 01h25

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