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

Windows Forms Discussion :

[C#] Comment implementer l'arrêt/reboot d'une application ?


Sujet :

Windows Forms

  1. #1
    Membre du Club Avatar de papouAlain
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 127
    Points : 64
    Points
    64
    Par défaut [C#] Comment implementer l'arrêt/reboot d'une application ?
    Je suis un peu embété avec mon application.

    Je voudrais l'arréter, puis la redemarrer, quand je suis sur qu'elle a été arrétée correctement. J'ai pensé qu'en synchronisant 2 Thread, ça pourrai répondre à mon besoin.

    J'ai écris le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    	class x
    	{
    		static AutoResetEvent myOldThreadEvent = new AutoResetEvent(false);
     
    		static void Main()
    		{
    			Thread myNewThread = new Thread(new ThreadStart(MyNewThreadProc));
    			myReaderThread.Priority = ThreadPriority.AboveNormal;
    			myReaderThread.Name = "NewThread";
    			myReaderThread.Start();
     
    			Thread.CurrentThread.Abort();
    //			Application.Exit();
    			myOldThreadEvent.Set();
    		}
    		static void MyNewThreadProc()
    		{
    			Process myProcess = new Process();
    			myProcess.StartInfo.FileName = Application.ExecutablePath;
    			// attend un evt du "Old" Thread 
    			myOldThreadEvent.WaitOne();
    			myProcess.Start();
    		}
    	}
    Mais problème. Est-ce que le myOldThreadEvent.Set(); va être réalisé après le Thread.CurrentThread.Abort(); : : :

    Si je remplace par un Application.Exit(); je kill l'autre Thread, non ?

    Bref, tout ça n'a pas l'air de fonctionner !
    C'est au pied du mur, qu'on voit le mieux le mur !!!

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Ben là j'avoue que je ne comprend pas comment une application peut et doit s'autodémarrer. Ne serait-il pas preferable de confier cela à une autre appli/service :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre du Club Avatar de papouAlain
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    ceci se produit dans mon application après une restauration de la base de données MSDE que j'effectue par le biais de SQLDMO. Un redémarrage est conseillé.
    Donc j'arrive bien à l'arréter comme n'importe qui saurait le faire.
    Mais pour ce qui est du redémarrage : je sais faire, en lançant un nouveau Thread, qui lance le process.
    Mais je n'arrive pas à m'assurer que le précédent est bien terminé.
    C'est au pied du mur, qu'on voit le mieux le mur !!!

  4. #4
    Membre du Club Avatar de papouAlain
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    merci neguib !
    j'ai suivi ton conseil.
    En effet il était difficile de s'auto redemarrer.
    1 - lors du déploiement, j'installe un exe chargé de rebooter mon application.
    2 - quand il faut faire un reboot, mon application lance le process Reboot.

    J'ai rajouté tous les contrôles possibles (car je me doute que les bricoleurs vont tenter de faire le ménage et supprimer malencontreusement le Reboot.exe).

    Problème résolu !
    C'est au pied du mur, qu'on voit le mieux le mur !!!

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2003
    Messages : 284
    Points : 758
    Points
    758
    Par défaut
    euh, juste une remarque sémantique: j'espère que ton "reboot.exe" n'est qu'une variable de ton message, et non pas le nom réel d'une de tes appli !
    Cela pourrait entrer en conflit avec certains outils/logiciels systèmes qui ont un reboot.com pour redémarrer le PC complètement. En général, ce genre d'outils sont dans le PATH et donc appellables de partout.

    Imagine le cas où ton reboot soit qd meme effacé et que cela soit le reboot système qui soit appellé, bonjour la catastrophe !

  6. #6
    Membre du Club Avatar de papouAlain
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    merci pour l'éclairage.
    C'est au pied du mur, qu'on voit le mieux le mur !!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/05/2007, 16h50
  2. Réponses: 3
    Dernier message: 09/04/2007, 22h26
  3. Réponses: 1
    Dernier message: 06/10/2006, 20h57
  4. Réponses: 11
    Dernier message: 13/01/2006, 15h30

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