Lancer un processus et rediriger sa sortie

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

May 23, 2013
508
0
322
'merica
titre de merde, je sais. :noel:


Dans ce petit tutoriel destine au débutants, je vais vous montrer comment lancer un processus, et rediriger sa sortie.
"cmd.exe" et la commande "tasklist" seront utiliser dans cet exemple, a vous de l'adapter selon vos besoins !
J'utiliserais le C#, mais vous pouvez le "traduire" en VB très facilement.


Prérequis
  • Bases du C#
  • Créer un projet de type ConsoleApplication

C'est quoi un processus ??​
Pour simplifier, c'est le nom donne par Windows au exécutables qui sont entrain de tourner. (ex: chrome.exe | cmd.exe | Skype.exe ....)
Pour les voir il vous suffit de cliquer sur démarrer et puis d'entrer " taskmgr" (Task Manager).




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)
Pour l'importer:
Code:
using System.Diagnostics; //en haut de votre fichier .cs

On va maintenant procéder a la 1ère partie de ce tutoriel : Créer un processus. Pour cela, nous allons utiliser les classes Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! et Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!

On commence par créer une instance de la classe ProcessStartInfo comme ceci:
Code:
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
};

Puis on lance le processus :
Code:
Process p = Process.Start(psi); // Le processus se lance avec les informations de la classe ProcessStartInfo qu'on vient de créer.

Pour récupérer la sortie (output) du processus, on utilise la propriété Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Code:
string output = p.StandardOutput.ReadToEnd(); // on le stocke dans une variable de type string

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)
Code:
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


Épilogue
Voila, ce court tutoriel est terminé, j’espère qu'il aura aidé certains d'entre vous.
Il y a des millions d'autre choses possible, vous pouvez rediriger la sortie de votre console vers un fichier texte (en utilisant Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! ), ou encore vers la console de Visual Studio. La seule limite est votre imagination.

Questions/Commentaires/Critiques sont toujours les bienvenus, sur ce post ou en MP.

Cdt, Davy.



PS: Sur QWERTY, désolé pour le maque d'accents.
 
Last edited:

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
Quand un programme se ferme, il retourne un ExitCode, tu le vois pas exemple quand tu debug ton programme :
-1 pour un arrêt forcé par exemple.

Tu peux aussi retourner un texte.
Ainsi cela te permet d'obtenir des informations sur le travail fait par un processus. Tu peux l'appliquer à un bot, un cheat, un logiciel avec des librairies, ...
 

Ben

Master Chief
V
Ancien staff
Mar 3, 2011
4,069
3
944
Un peut partout.
Les amateurs en général préfère commencer par du vb.net ou c# car plus de sources ... et plus simple à comprendre
Edit :
Après si tu gère bien le c++ tu n’auras aucuns problème à faire ce que tu veux avec ce genre de code simpliste hin
 
Last edited:

phylonia5

Membre
Sep 22, 2011
22
0
301
73
Je remonte 6 mois après ce sujet, je n'ai pas trop compris, fin j'ai l'impression que ça ressort les choses en "brute", ça marche très bien pour CMD mais pas du tout pour d'autres trucs.
En faite c'est très limité pour le CMD, ça peut toujours être utile en soit. Je pensais que ça ressort en direct les logs, ce que ça affiche etc, j'ai d'abord essayer sur un jeu, puis sur un logiciel que j'avais fais ... Et les deux n'ont sortie aucun log xD

En plus ça affiche à la fin, bon, si vous faites des logis nécessitant le retour de logs de CMD utile sinon, pas grand chose sera utile avec.
 

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
Je remonte 6 mois après ce sujet, je n'ai pas trop compris, fin j'ai l'impression que ça ressort les choses en "brute", ça marche très bien pour CMD mais pas du tout pour d'autres trucs.
En faite c'est très limité pour le CMD, ça peut toujours être utile en soit. Je pensais que ça ressort en direct les logs, ce que ça affiche etc, j'ai d'abord essayer sur un jeu, puis sur un logiciel que j'avais fais ... Et les deux n'ont sortie aucun log xD

En plus ça affiche à la fin, bon, si vous faites des logis nécessitant le retour de logs de CMD utile sinon, pas grand chose sera utile avec.
On ne récupère ici que l'exit code, donc effectivement tu n'auras pas les logs.
 

ragnarock

Membre actif
Mar 22, 2010
194
0
917
On ne récupère ici que l'exit code, donc effectivement tu n'auras pas les logs.

Yop,

Non c'est bien la sortie qui est redirigée, tout ce qui est entré dans le standard output stream, donc le std::cout en c++, le Console.Write en C#, ...

Ensuite si effectivement une app utilise ce stream pour faire du log, on peut le récupérer, mais ça risque rarement d'être le cas. Lire ce stream est utile dans des cas spécifiques, pas de manière générale.

Wiki pour plus d'infos : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
 

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
Yop,

Non c'est bien la sortie qui est redirigée, tout ce qui est entré dans le standard output stream, donc le std::cout en c++, le Console.Write en C#, ...

Ensuite si effectivement une app utilise ce stream pour faire du log, on peut le récupérer, mais ça risque rarement d'être le cas. Lire ce stream est utile dans des cas spécifiques, pas de manière générale.

Wiki pour plus d'infos : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Autant pour moi, j'avais lu p.ExitCode
 

phylonia5

Membre
Sep 22, 2011
22
0
301
73
Donc utilité très rare :/ je voulais test voir si on pouvait avoir un peu des informations sur les actions faites pour voir si un bot en faisant un logiciel qui lirais le stream et agirais sur l'application hors focus. Mais à priori ça tombe à l'eau, sur quelques jeux tester et une application perso rien ne sortais ^^'

Et en effet vu que c'est la console, sur mon logi en tout cas ça risquerait de jamais rien voir x)