Je voudrais exécuter un programme de ligne de commande externe à partir de mon application Mono / .NET. Par exemple, je voudrais exécuter mencoder . C'est possible:
- Pour obtenir la sortie du shell de ligne de commande et l'écrire sur ma zone de texte?
- Pour obtenir la valeur numérique pour afficher une barre de progression avec le temps écoulé?
c#
.net
mono
process.start
lourd
la source
la source
Vous pouvez traiter votre sortie de manière synchrone ou asynchrone .
1. Exemple synchrone
Notez qu'il est préférable de traiter à la fois la sortie et les erreurs : elles doivent être traitées séparément.
(*) Pour certaines commandes (ici
StartInfo.Arguments
) vous devez ajouter la/c
directive , sinon le processus se fige dans leWaitForExit()
.2. Exemple asynchrone
Si vous n'avez pas besoin de compliquer les opérations avec la sortie, vous pouvez contourner la méthode OutputHandler, en ajoutant simplement les gestionnaires directement en ligne:
la source
D'accord, pour tous ceux qui souhaitent lire à la fois les erreurs et les sorties, mais obtiennent des blocages avec l'une des solutions, fournies dans d'autres réponses (comme moi), voici une solution que j'ai construite après avoir lu l'explication de MSDN pour la
StandardOutput
propriété.La réponse est basée sur le code T30:
la source
Pour cela, la méthode standard .NET consiste à lire le flux StandardOutput du processus . Il y a un exemple dans les documents MSDN liés. De même, vous pouvez lire depuis StandardError et écrire dans StandardInput .
la source
Il est possible d'obtenir la sortie du shell de ligne de commande d'un processus comme décrit ici: http://www.c-sharpcorner.com/UploadFile/edwinlima/SystemDiagnosticProcess12052005035444AM/SystemDiagnosticProcess.aspx
Cela dépend de mencoder. S'il sort ce statut sur la ligne de commande, alors oui :)
la source
vous pouvez utiliser la mémoire partagée pour que les 2 processus communiquent, consultez
MemoryMappedFile
vous allez principalement créer un fichier mappé en mémoire
mmf
dans le processus parent en utilisant l'instruction "using", puis créer le deuxième processus jusqu'à ce qu'il se termine et le laisser écrire le résultat à l'mmf
aideBinaryWriter
, puis lire le résultat à l'mmf
aide du processus parent, vous pouvez également passez lemmf
nom en utilisant des arguments de ligne de commande ou codez-le en dur.assurez-vous que lorsque vous utilisez le fichier mappé dans le processus parent, vous faites en sorte que le processus enfant écrive le résultat dans le fichier mappé avant que le fichier mappé ne soit publié dans le processus parent
Exemple: processus parent
Processus enfant
pour utiliser cet exemple, vous devez créer une solution avec 2 projets à l'intérieur, puis vous prenez le résultat de la construction du processus enfant de% childDir% / bin / debug et le copiez dans% parentDirectory% / bin / debug puis exécutez le projet parent
childDir
etparentDirectory
sont les noms de dossier de vos projets sur le pc bonne chance :)la source
Comment lancer un processus (tel qu'un fichier bat, un script perl, un programme de console) et afficher sa sortie standard sur un formulaire Windows:
Vous pouvez trouver
ProcessCaller
sur ce lien: Lancer un processus et afficher sa sortie standardla source
Vous pouvez enregistrer la sortie du processus à l'aide du code ci-dessous:
la source
La solution qui a fonctionné pour moi dans Win et Linux est le suivant
la source