2010-03-02 6 views
32

J'ai une application de console C# (A). Je veux exécuter une autre application de console (B) à partir de l'application A (de manière synchrone) de telle sorte que B utilise la même fenêtre de commande. Quand B existe, A devrait être capable de lire le code de sortie de B.Exécution d'une application de console à partir d'une autre application de console

Comment faire? J'ai juste besoin de cette petite astuce sur la façon d'exécuter cette autre application dans la même fenêtre cmd.

Répondre

30

Vous pouvez utiliser Process.Start pour démarrer l'autre application de console.

Vous devez construire le processus avec ProcessStartInfo.RedirectOutput ensemble à true et UseShellExecute ensemble à false afin d'être en mesure d'utiliser la sortie vous-même.

Vous pouvez ensuite lire la sortie en utilisant StandardOutput.ReadToEnd sur le processus.

+0

Sur Windows 10 où cmd est l'environnement de construction de Windows Server 2008, cela ne fonctionne plus, la nouvelle application ouvre immédiatement une nouvelle fenêtre. – Georg

9

Vous pouvez démarrer un autre processus à l'aide de l'appel Process.Start(). Le examples here montre comment lire la sortie d'un autre processus et attendre que cela se termine.

4

Vous pouvez démarrer un autre processus avec Process.Start - peu importe s'il s'agit d'une application de console ou non. Si votre application est déjà en cours d'exécution dans une fenêtre de console, l'application nouvellement créée utilisera également cette fenêtre de console.

var proc = Process.Start("...path to second app"); 
proc.WaitForExit(); 
var exitCode = proc.ExitCode; 

Assurez-vous de prêt la documentation sur la classe de processus, car il existe une variété de petites nuances qui peuvent influer sur la façon dont votre application secondaire est lancé.

0

vous pouvez « envelopper » l'ancienne application de la console avec le nouveau en l'incluant dans vos références et en commençant hors tension en appelant la méthode que l'on appelle dans la méthode d'exécution de la classe programme

1

j'ai pu courir le programme « B » dans le cadre de la même fenêtre de commande en appelant la configuration suivante:

ConsoleColor color = Console.ForegroundColor; 
ProcessStartInfo startinfo = new ProcessStartInfo(nameProgramB); 
startinfo.CreateNoWindow = false; 
startinfo.UseShellExecute = false; 
Process p = Process.Start(startinfo); 
p.WaitForExit(); 
Console.ForegroundColor = color; 

cette façon, les deux programmes menés seamlesly comme ils étaient un seul programme. 'nameProgramB' est le nom du programme 'B'. J'espère que cela t'aides.

Questions connexes