Comment capture-t-on la sortie/erreur standard d'un processus démarré par un Process.Start()
vers un string
?Comment capturer la sortie/l'erreur standard d'un processus?
Répondre
Par redirecting it et de lire le flux.
Exemple de code est ci-dessous:
ProcessStartInfo psi = new ProcessStartInfo();
psi.CreateNoWindow = false;
psi.UseShellExecute = false;
psi.FileName = "C:\\my.exe";
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
using (Process exeProcess = Process.Start(psi))
{
exeProcess.WaitForExit();
var exitCode = exeProcess.ExitCode;
var output = exeProcess.StandardOutput.ReadToEnd();
var error = exeProcess.StandardError.ReadToEnd();
if (output.Length > 0)
{
// you have some output
}
if(error.Length > 0)
{
// you have some error details
}
}
Vous devez définir UseShellExecute sur true pour que le verbe soit respecté et il doit être défini sur 'false' pour rediriger la sortie standard. Vous ne pouvez pas faire les deux. Je suis à peu près certain que Windows ne vous permettra pas non plus de rediriger les entrées/sorties/erreurs standard dans les limites de sécurité admin/non-admin. Vous devrez trouver une manière différente d'obtenir la sortie du programme en cours d'exécution en tant qu'admin - Référence: http://stackoverflow.com/a/8690661 – Kiquenet
-1. Comme indiqué par la documentation MSDN: "Une situation de blocage se produit si le processus parent appelle p.StandardOutput.ReadToEnd suivi de p.StandardError.ReadToEnd et que le processus enfant écrit suffisamment de texte pour remplir son flux d'erreurs". Votre code fait exactement cela. – tstone2077
Pour résoudre les problèmes de blocage utilisent cette approche:
ProcessStartInfo hanging on "WaitForExit"? Why?
fonctionne bien dans mon code ...
- 1. Comment capturer la sortie du processus en C?
- 2. Impossible de capturer la sortie standard du processus à l'aide de Boost.Process
- 3. Comment puis-je capturer la sortie standard à partir d'un processus qui est déjà en cours d'exécution
- 4. Capturer la sortie standard en Gradle 0,8 construit
- 5. Comment lire la sortie standard d'un processus fils dans VB6?
- 6. Comment capturer la sortie d'execvp
- 7. Comment capturer l'événement si un nouveau processus (application!) Est démarré?
- 8. Comment capturer un processus .Net en cours sur le disque?
- 9. Comment capturer une sortie de processus binaire en C# /. NET
- 10. entrée standard personnalisé pour python sous-processus
- 11. Comment capturer la sortie standard sur iPhone? (à des fins de développement)
- 12. Comment capturer une sortie d'erreur standard à partir d'un service Windows?
- 13. Utilisation d'Excel VBA pour capturer le mode d'édition en vérifiant la barre d'outils standard
- 14. C# - comment fermer les flux d'entrée et de sortie standard à la sortie du processus?
- 15. Comment capturer la touche Impr écran?
- 16. Comment capturer la page avec google map?
- 17. Exécuter un processus et renvoyer sa sortie standard dans VC++
- 18. Comment puis-je capturer la sortie du shell cmd Windows?
- 19. PowerShell: comment utiliser la sortie standard à la place du nom de fichier
- 20. Capture la sortie standard et l'affiche toujours dans la fenêtre de la console
- 21. Comment capturer l'emplacement de MapActivity
- 22. Appel d'un processus Linux à partir de Windows et réception de la sortie standard
- 23. Comment capturer une variable (C#)
- 24. Comment capturer la molette de la souris sur le panneau?
- 25. Sortie partiellement lue de la sortie standard d'un autre processus créé à partir de l'application C#
- 26. La question standard C++
- 27. Avec bash, comment puis-je rediriger l'erreur standard dans un autre processus?
- 28. Comment puis-je capturer le PID et la sortie d'un processus PHP en arrière-plan en même temps?
- 29. Comment interroger le nombre de threads d'un processus à l'aide des API Windows C/C++ standard
- 30. Redirection de la sortie standard d'un processus (msxsl.exe) vers une chaîne dans VB.NET
-1: Le lien article s'exécute dans un problème de blocage (au moins, au moment de l'écriture de ce): Comme indiqué par la documentation MSDN: «Une situation de blocage se produit si le pr parent appels ocess p.StandardOutput.ReadToEnd suivi de p.StandardError.ReadToEnd et le processus enfant écrit suffisamment de texte pour remplir son flux d'erreurs ". – tstone2077