Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

  1. Home
  2. Programmation
  3. Développement de logiciels
  4. C#
  5. Lancer un processus et rediriger sa sortie

Lancer un processus et rediriger sa sortie

Scheduled Pinned Locked Moved C#
2 Posts 2 Posters 3.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D
    D
    davydavek
    wrote on last edited by
    #1

    <p></p><p>Dans ce petit tutoriel destiné au débutants, je vais vous montrer comment lancer un processus, et rediriger sa sortie.</p><p>
    "cmd.exe" et la commande "tasklist" seront utilisé dans cet exemple, a vous de l'adapter selon vos besoins !</p><p><em>J'utiliserais le C#, mais vous pouvez le "traduire" en VB très facilement.</em></p><p></p><p><strong>Prérequis</strong></p>
    <ul><li>Bases du C#</li>
    <li>Créer un projet de type ConsoleApplication</li>
    </ul><p style="text-align:center;"><strong>Qu'est-ce qu'un processus ?</strong></p>
    <p></p><p>  Pour simplifier, c'est le nom donné par Windows au exécutables qui sont entrain de tourner. (ex: chrome.exe |  cmd.exe | Skype.exe ....)</p><p>
    Pour les voir il vous suffit de cliquer sur démarrer et puis d'entrer " taskmgr" (Task Manager).</p><p></p><p style="text-align:center;"><strong><a href="http://msdn.microsoft.com/en-us/library/System.Diagnostics(v=vs.110).aspx" rel="external nofollow">System.Diagnostics</a></strong></p>
    <p></p><p>
    Ce namespace contient des structures/classes qui vont nous permettre d'interagir avec d'autres processus (et d'autres choses mais on ne va s'en préoccuper durant ce tutoriel)</p><p>
    Pour l'importer:</p><p>
     </p>
    <pre class="ipsCode prettyprint lang-auto">
    using System.Diagnostics; //en haut de votre fichier .cs</pre>
    <p> </p><p>
    On va maintenant procéder a la 1ère partie de ce tutoriel : Créer un processus. Pour cela, nous allons utiliser les classes <a href="http://msdn.microsoft.com/en-us/library/vstudio/System.Diagnostics.Process(v=vs.110).aspx" rel="external nofollow">Process</a> et <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo(v=vs.110).aspx" rel="external nofollow">ProcessStartInfo</a></p><p>
     </p><p>
    On commence par créer une instance de la classe ProcessStartInfo comme ceci:</p><p>
     </p>
    <pre class="ipsCode prettyprint lang-auto">
    ProcessStartInfo psi = new ProcessStartInfo
    {
         FileName = "cmd.exe",   // Nom du processus (ici nous n'avons pas besoin de spécifier le chemin car cmd.exe est situé dans les dossiers du systeme.
         Arguments = "/c tasklist",  // Commande a exécuter, le /c dit a l’interpréteur de commande "exécute xxx commande et casse toi", tasklist est le nom de la commande qui permet de lister tout les processus actifs.
         RedirectStandardOutput = true,  // Pour dire qu'on va rediriger la sortie
         UseShellExecute = false,  // Dit a l'OS de démarrer le processus directement a partir de l’exécutable
    };
    </pre>
    <p> </p><p>
    Puis on lance le processus  :</p><p>
     </p>
    <pre class="ipsCode prettyprint lang-auto">
    Process p = Process.Start(psi); // Le processus se lance avec les informations de la classe ProcessStartInfo qu'on vient de créer.</pre>
    <p> </p><p>
    Pour récupérer la sortie (output) du processus, on utilise la propriété <a href="http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.process.standardoutput(v=vs.110)" rel="external nofollow">Process.StandardOutput.ReadToEnd</a></p><p>
     </p>
    <pre class="ipsCode prettyprint lang-auto">
    string output = p.StandardOutput.ReadToEnd(); // on le stocke dans une variable de type string</pre>
    <p> </p><p>
    Avant d'afficher la sortie sur notre console, nous allons attendre que le processus se termine, en spécifiant un timeout (durée maximum d'attente)</p><p>
     </p>
    <pre class="ipsCode prettyprint lang-auto">
    p.WaitForExit(10000); // dix secondes
    Console.WriteLine(output); //écrit la sortie sur notre console
    Console.ReadKey(); //pause pour qu'on ai le temps de lire ce qui est sur notre console</pre>
    <p></p><p style="text-align:center;"><strong>Épilogue</strong></p>
    <p></p><p>Voila, ce court tutoriel est terminé, j’espère qu'il aura aidé certains d'entre vous.</p><p>
    Il y a  des millions d'autre choses possible, vous pouvez rediriger la sortie de votre console vers un fichier texte (en utilisant <a href="http://msdn.microsoft.com/en-us/library/system.console.setout(v=vs.110).aspx" rel="external nofollow">Console.SetOut</a> ), ou encore vers la console de Visual Studio. La seule limite est votre imagination.</p><p>
     </p><p>
    Questions/Commentaires/Critiques sont toujours les bienvenus, sur ce post ou en MP.</p><p></p><p>Davy.</p>
    <p></p><p>
    PS: Sur QWERTY, désolé pour le manque d'accents.</p>
    <p> </p>
    <p>PS2: Les quelques lignes qui sont supposée être en gras ne le sont pas.</p>

    C# dev
    github.com/DavyWk

    1 Reply Last reply
    0
    • AzadA
      AzadA
      Azad
      wrote on last edited by
      #2

      <p>Bon tutoriel, merci de ton implication. 🙂 </p>
      <p>+1 rep.</p>

      Administrateur du forum.
      Contactez-moi par message privé ou par mail.

      1 Reply Last reply
      0

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Login or register to search.
      Powered by NodeBB Contributors
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups