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# Discussion :

[3.5] problème pour redémarrer une application


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut [3.5] problème pour redémarrer une application
    salut tout le monde,

    je bosse sur une appli c#, composée d'une interface WPF et d'un thread d'accès aux données en parallèle.
    J'utilise le deployement ClickOnce, et pour éviter de faire intervenir le client quand je publie des mises à jour, j'ai inséré dans mon code la détection et le téléchargement de ces MAJ. Je termine par un Application.Restart() quand tout est prêt.
    ce bout de code est dans le thread de l'accès aux données.

    Le problème, c'est que la méthode lance une nouvelle instance de l'application sans fermer l'ancienne, au bout de 2 jours elle tournait 6 fois (autant que de mise à jour)...

    Quelqu'un aurait-il une solution?

    merci d'avance!

  2. #2
    Membre très actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Par défaut
    un Application.Exit() avant ou après le restart ne résoud rien?

  3. #3
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Non, je vient de redémarrer le PC car l'application tournait 40 fois en même temps! et même si ça aurait marché je trouve ça très surprenant de devoir en arriver la...
    cette méthode Restart() est louche...

  4. #4
    Membre très actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Par défaut
    Citation Envoyé par thelpi Voir le message
    Non, je vient de redémarrer le PC car l'application tournait 40 fois....
    Essaie quand même ce que je t'ai proposé

    Citation Envoyé par thelpi Voir le message
    ...et même si ça aurait marché je trouve ça très surprenant de devoir en arriver la...
    cette méthode Restart() est louche...
    Effectivement puisque Restart arrête l'application et démarre immédiatement une nouvelle instance. Peut être fais-tu une autre manip'

  5. #5
    Membre très actif
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par défaut
    Et pourquoi tu ne ferais pas une autre application qui serait appelée par la première pour télécharger les données ?

    Je m'explique disons toto.exe ton application à mettre a jour tu code une autre application updater.exe quand toto.exe détecte une maj elle appelle updater.exe et se suicide via une Kill() updater fait les mises à jour et relance toto.exe

  6. #6
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Quand tu arrêtes ton application principale, tu n'oublies pas d'arrêter tes threads proprement ?

  7. #7
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Fally => je me suis mal exprimé, quand je dit que j'ai du redémarrer mon PC, c'était en utilisant ta méthode!

    teddyalbina => ce sera la dernière solution à envisager, je trouve ça bien compliqué, alors que je suis sur que le problème ne doit pas être grand chose

    Jérôme Lambert => effectivement, je pense plutot que le probleme vient de la. Comme je l'ai dit dans mon premier post, je redémarre l'application à partir du thread en parallèle à l'interface graphique.

    En fait, dans le Main() de l'application, je charge tout mes composants graphiques, et une fois terminés je lance le deuxième thread, mais bien sur le thread principal est toujours Alive.

    Comme je suis obligé de faire la détection de MAJ dans le deuxième thread, j'ai essayé ensuite de la manière suivante:

    dans le 2ème thread, au lieu de faire Application.Restart quand les MAJ sont prètes, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.CurrentThread.Abort();
    dans le thread principal, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Thread2.Run(); // lancement du deuxième thread
    while (Thread2.IsAlive) {} // ne fait rien
    Application.Restart() // quand le thread 2 est arrété, redémarrage
    cette méthode ne marche pas non plus, mais effectivement comme je ne m'y connait pas trop en Thread, je ne suis pas sur que tout ceci soit bien clean de toute façon...

    Merci pour vos réponses!

  8. #8
    Membre éprouvé Avatar de Onlava
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 92
    Par défaut
    Et as tu essayé Environment.Exit() ?

Discussions similaires

  1. [WEB] Problème pour lancer une application web
    Par verbose dans le forum Eclipse
    Réponses: 0
    Dernier message: 28/09/2009, 12h08
  2. Problème pour déployer une application au sein de Tomcat.
    Par mhamdi200 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 07/04/2008, 13h17
  3. Réponses: 2
    Dernier message: 14/12/2007, 10h43
  4. Réponses: 4
    Dernier message: 09/05/2007, 17h03
  5. Réponses: 5
    Dernier message: 24/09/2005, 20h31

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