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 :

[C#] Éxécution de Processus et redirection de sortie


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [C#] Éxécution de Processus et redirection de sortie
    Bonjour à tous,

    j'ai cette classe qui sert à exécuter des binaire et à rediriger leur sortie.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    internal class Execute
        {
            #region Constructor
            public Execute(String BinariesFolder)
            {
                this.Binaries = BinariesFolder;
            }
            #endregion
            #region Fields
            private String Binaries = String.Empty;
            #endregion
            #region Events
            private EventHandler PrivateExitedHandler = null;
            public EventHandler ÉxitedHandler
            {
                set { PrivateExitedHandler = value; }
            }
            private DataReceivedEventHandler PrivateOutputHandler = null;
            public DataReceivedEventHandler OutputHandler
            {
                set { PrivateOutputHandler = value; }
            }
            private DataReceivedEventHandler PrivateErrorHandler;
            public DataReceivedEventHandler ErrorHandler
            {
                set { PrivateErrorHandler = value; }
            }
            #endregion
            public void ExecuteCommand(String Command, String Parametters)
            {
                String CommandPath = System.IO.Path.Combine(this.Binaries, Command + ".exe");
                ProcessStartInfo ProcessInfos = new ProcessStartInfo(CommandPath, Parametters);
                ProcessInfos.RedirectStandardInput = true;
                ProcessInfos.RedirectStandardOutput = true;
                ProcessInfos.RedirectStandardError = true;
                ProcessInfos.UseShellExecute = false;
                ProcessInfos.CreateNoWindow = true;
                Process Processs = new Process();
                Processs.StartInfo = ProcessInfos;
                try
                {
                    Processs.Start();
                    Processs.EnableRaisingEvents = true;
                    if (PrivateOutputHandler != null)
                        Processs.OutputDataReceived += PrivateOutputHandler;
                    if (PrivateErrorHandler != null)
                        Processs.ErrorDataReceived += PrivateErrorHandler;
                    if (PrivateExitedHandler != null)
                        Processs.Exited += PrivateExitedHandler;
                    Processs.BeginErrorReadLine();
                    Processs.BeginOutputReadLine();
                }
                catch (Exception)
                {
     
                }
            }
        }
    Ma question :
    Comment être notifier de l'arrêt du Process, une fois que toutes la sortie à été envoyer...

    car en fait les events sont envoyée ligne par ligne... et vu que l'exécutable s'éxécute rapidement ba j'ai la première ligne ensuite l'adret du processus puis les autre ligne de la sortie ...

    Merci d'avance

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    unprocess.hasexited
    il y a aussi un evenement je crois
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut, justement c'est ça le problème, je suis bien abonné à l'évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Processs.Exited += PrivateExitedHandler;
    Mais je suis notifié de la fermeture du programme avant d'avoir reçu toutes les OutPut ...

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

Discussions similaires

  1. redirection entrée/sortie sous windows en C
    Par alexlecool dans le forum C
    Réponses: 3
    Dernier message: 08/12/2006, 09h05
  2. Tâche d'éxécution de processus DTS2000
    Par icebe dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/11/2006, 07h56
  3. redirection de sortie
    Par youp_db dans le forum Windows
    Réponses: 7
    Dernier message: 01/09/2006, 11h47
  4. redirection entrée sortie
    Par ludovik dans le forum Réseau
    Réponses: 4
    Dernier message: 20/06/2006, 20h28
  5. Redirection de sortie
    Par Danae dans le forum Linux
    Réponses: 22
    Dernier message: 11/12/2005, 22h32

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