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 :

Petit souci de Process Externe


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut Petit souci de Process Externe
    Plop,

    J'ai un petit souci avec une petite application que je développe dont le but est d'installer de manière automatisée les logiciels que j'ai l'habitude de réinstaller sur les postes de mes clients (suis tech info dans une petite boîte de maintenance).

    En gros je procède de la manière suivante :
    - chaque dossier a un fichier si.xml que je parse via XPathDocument et qui ressemble à ça :
    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
    <si>
    	<xp>
    		<exec>setup.exe</exec>
    		<params>/quiet</params>
    		<cmd>xcopy "silent\Open Office\user\*.*" %USERPROFILE%\Application Data\OpenOffice.org\3\user\*.* /e /f</cmd>		
    	</xp>
    	<vista>
    		<exec>setup.exe</exec>
    		<params>/quiet</params>
    		<cmd>xcopy "silent\Open Office\user\*.*" %USERPROFILE%\AppData\Roaming\OpenOffice.org\3\user\*.* /e /f</cmd>		
    	</vista>
    	<w7>
    		<exec>setup.exe</exec>
    		<params>/quiet</params>
    		<cmd>xcopy "silent\Open Office\user\*.*" %USERPROFILE%\AppData\Roaming\OpenOffice.org\3\user\*.* /e /f</cmd>		
    	</w7>
    </si>
    - Je récupère les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string exec = iter.Current.SelectSingleNode("exec").Value;
    string silent = iter.Current.SelectSingleNode("params").Value;
    string cmd = iter.Current.SelectSingleNode("cmd").Value;
    - J'éxécute et je fais avancer une petite progressbar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Diagnostics.Process.Start(path+"\\"+exec, silent).WaitForExit();
    Mon application fonctionne bien, le seul problème vient du fait qu'elle "freeze", on ne voit pas la progression mais continue à fonctionner.

    Ca doit venir de mon Process.Start suivi de mon WaitForExit(); mais comme je n'ai pas la moindre idée pour corriger ça (après avoir cherché un bon moment sur msdn) je m'en remets à votre savoir.

    L'idée est donc de pouvoir voir la progression de l'installation au fur et à mesure.

    Merci de votre aide.

    Flexii

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    c normal

    tu lances le process depuis le thread UI (User Interface).

    Et tu lances et tu attends (WaitForExit())...

    La boucle de gestion de message windows est donc bloquée tant que l'application n'a pas fini son travail...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Process notepad = Process.Start(@"notepad.exe");
                notepad.EnableRaisingEvents = true;
                notepad.Exited += new EventHandler(notepad_Exited);
    comme ça, une fois ton process lancé, tu recupères la main.. et sur le notepad_exited (ici pour l'exemple), tu peux arreter ta progressbar

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    Merci pour ta réponse qui m'a bien éclairé.

    Du coup l'UI n'est pas bloquée, ma progressbar avance bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Process install = Process.Start(@path+"\\"+exec, silent);
    install.EnableRaisingEvents = true;
    install.Exited += new EventHandler(installstatut);
    Et je déclare une methode installstatut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void installstatut(object sender, EventArgs e)
    {
    	progress.Value = progress.Value + 1;
    }
    Toutefois j'ai plusieurs questions :
    - A quoi sert l'@?
    - Je tiens à ce que les process ne se lancent pas simultanément d'où mon WaitForExit(); initial. Pourrais tu m'orienter?

    Merci bien.

    Flexii

  4. #4
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Utilise un BackgroundWorker qui sera chargé de lancer les process les uns à la suite des autres.

    Les installs se feront donc dans un thread à part et ne bloqueront pas ton interface graphique.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    et le @ te permet de définir un chemin sans avoir à utiliser le "double \" ie "\\"
    dans une chaine de caractère !!!


    Tu peux créer une liste (ou stack pourquoi pas) de process à traiter et à lancer.

    Dans ta méthode exit, tu enleves le dernier process lancé et tu lances le restant

    Ainsi, chaque fin de process lancera le process suivant !!! et si tu ajoutes de nouveau process dans une liste (qui pourrait venir d'un fichier de configuration type xml), tu n'auras rien à ajouter !!!

    PErso, je ferais comme celà + un fichier contenant la liste des process à lancer !!!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 7
    Par défaut
    Merci pour vos idées je regarde tout ça!

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

Discussions similaires

  1. Petit soucis pour se connecter à l'adsl
    Par Blowih dans le forum Réseau
    Réponses: 4
    Dernier message: 28/07/2004, 01h16
  2. petit soucy de fenetre cmd
    Par FeetloveR666 dans le forum Windows
    Réponses: 5
    Dernier message: 03/07/2004, 15h24
  3. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 12h58
  4. Réponses: 6
    Dernier message: 21/01/2004, 14h25
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 17h52

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