2010-03-16 10 views
2

MSDN indique qu'il est possible dans .NET de capturer la sortie d'un processus et l'afficher dans la fenêtre de console en même temps.La capture et l'affichage de la console d'affichage en même temps

Normalement, lorsque vous définissez StartInfo.RedirectStandardOutput = true; la fenêtre de la console reste vide. Comme le site MSDN ne fournit pas d'échantillon pour cela, je me demandais si quelqu'un aurait un échantillon ou pourrait me diriger vers un échantillon?

Lorsqu'un processus écrit le texte dans son flux norme, ce texte est normalement affiché sur la console. Par rediriger le flux StandardOutput , vous pouvez manipuler ou supprimer la sortie d'un processus. Par exemple, vous pouvez filtrer le texte, le mettre en forme différemment, ou écrire la sortie à à la fois la console et un fichier journal désigné . MSDN

Ce poste est similaire à Capture standard output and still display it in the console window par la voie. Mais ce poste ne s'est pas terminé avec un échantillon de travail.

Merci beaucoup,

Patrick

Répondre

0

Voir cette réponse ici SO que je posté code pour un processus exec netstat une rediriger le flux de sortie à une instance stringbuilder. Le processus crée une fenêtre masquée et n'est pas visible ...

Vous pouvez modifier le code en modifiant légèrement les valeurs respectivement

 
ps.CreateNoWindow = true; <--- Comment this out... 
ps.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; <--- Comment this out... 
+0

Le problème est quand je fais la fenêtre visible, il sera vide puisque la sortie est redirigé. Merci, Patrick –

+0

@Patrick: Alors ... changez le ps.CreateNoWindow ci-dessus à true, et rendez le ps.WindowStyle caché ...? – t0mm13b

+0

Salut TommieB, désolé ne comprends pas. La raison de ma question était que j'aime voir la sortie dans la fenêtre de commande comme d'habitude et je veux la sortie dans une variable de chaîne à la fin. Lorsque vous utilisez StartInfo.RedirectStandardOutput = true; la fenêtre de la console reste vide ... par ex. il ne ressemble pas "comme d'habitude" :) –

1

vous pouvez facilement attraper tous les messages en utilisant

Process build = new Process(); 
... 
build.StartInfo.UseShellExecute = false; 
build.StartInfo.RedirectStandardOutput = true; 
build.StartInfo.RedirectStandardError = true; 
build.StartInfo.CreateNoWindow = true; 
build.ErrorDataReceived += build_ErrorDataReceived; 
build.OutputDataReceived += build_ErrorDataReceived; 
build.EnableRaisingEvents = true; 
... 

et créer l'événement build_ErrorDataReceived

static void build_ErrorDataReceived(object sender, DataReceivedEventArgs e) 
{ 
    string msg = e.Data; 
    if (msg != null && msg.Length > 0) 
    { 
     // in msg you have the line you need! 
    } 
} 

ajouter un petit exemple

Screencast of the application

Solution Files (VS 2008)

+0

> Normalement, lorsque vous définissez StartInfo.RedirectStandardOutput = true; la fenêtre de la console reste vide. C'est ce que je ne veux pas :) J'aime obtenir le résultat sous forme de chaîne + la fenêtre de la console devrait ressembler comme d'habitude et afficher les messages comme se produisent. Merci Patrick –