Запустить консольное приложение из другого консольного приложения - PullRequest
35 голосов
/ 02 марта 2010

У меня есть консольное приложение C # (A). Я хочу выполнить другое консольное приложение (B) из приложения A (синхронно) таким образом, чтобы B использовало то же командное окно. Когда B существует, A должен быть в состоянии прочитать код выхода B.

Как это сделать? Мне нужен только этот маленький совет о том, как запустить это другое приложение в том же окне cmd.

Ответы [ 6 ]

35 голосов
/ 02 марта 2010

Вы можете использовать Process.Start для запуска другого консольного приложения.

Вам нужно будет сконструировать процесс с ProcessStartInfo.RedirectOutput, установленным на true и UseShellExecute, установленным на false, чтобы иметь возможность самостоятельно использовать вывод .

Затем вы можете прочитать вывод, используя StandardOutput.ReadToEnd в процессе.

9 голосов
/ 02 марта 2010

Вы можете запустить другой процесс, используя вызов Process.Start(). Примеры здесь показывают, как прочитать выходные данные другого процесса и дождаться его завершения.

4 голосов
/ 02 марта 2010

Вы можете запустить другой процесс с помощью Process.Start - не имеет значения, является ли это консольным приложением или нет. Если ваше приложение уже запущено в окне консоли, то новое порождаемое приложение также будет использовать это окно консоли.

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

Обязательно подготовьте документы по классу Process, поскольку существует множество мелких нюансов, которые могут повлиять на способ запуска вторичного приложения.

2 голосов
/ 26 сентября 2017

Мне удалось запустить программу «B» как часть того же командного окна, вызвав следующую конфигурацию:

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;

Таким образом, обе программы работают одинаково, как если бы они были одной программой. «nameProgramB» - это имя для программы «B». Надеюсь, это поможет.

1 голос
/ 06 февраля 2012

вы можете «обернуть» старое консольное приложение новым, включив его в свои ссылки и запустив его, вызвав любой метод, вызываемый в методе run класса программы

1 голос
/ 02 марта 2010

Заполните System.Diagnostics.ProcessStartInfo и передайте его Process.Start

Вы можете WaitForExit в результирующем процессе и затем использовать свойство ExitCode процесса, чтобы увидеть возвращаемое значение.

...