Ответ 1
Если вы просто хотите, чтобы окно консоли оставалось открытым, вы можете запустить его с помощью следующей команды:
System.Diagnostics.Process.Start( @"cmd.exe", @"/k c:\path\my.exe" );
Я хочу запустить консольное приложение (например, app.exe) из события загрузки формы Windows. I'v попробовал System.Diagnostics.Process.Start(), но после открытия app.exe он немедленно закрывает его.
Есть ли способ запустить приложение app.exe и оставить его открытым?
Если вы просто хотите, чтобы окно консоли оставалось открытым, вы можете запустить его с помощью следующей команды:
System.Diagnostics.Process.Start( @"cmd.exe", @"/k c:\path\my.exe" );
Попробуйте сделать это:
string cmdexePath = @"C:\Windows\System32\cmd.exe";
//notice the quotes around the below string...
string myApplication = "\"C:\\Windows\\System32\\ftp.exe\"";
//the /K keeps the CMD window open - even if your windows app closes
string cmdArguments = String.Format("/K {0}", myApplication);
ProcessStartInfo psi = new ProcessStartInfo(cmdexePath, cmdArguments);
Process p = new Process();
p.StartInfo = psi;
p.Start();
Я думаю, что это приведет вас к поведению, которое вы пытаетесь сделать. Предполагая, что вы просто не пытались увидеть результат в окне команд. Если вы просто хотите увидеть результат, у вас уже есть несколько версий этого ответа. Это просто, как вы можете запустить приложение и держать консоль открытой.
Надеюсь, это поможет. Удачи.
Если app.exe ничего не делает или быстро заканчивает работу (т.е. просто печатает "Hello World" и возвращает), он будет вести себя так, как вы только что объяснили. Если вы хотите, чтобы приложение app.exe оставалось открытым после завершения его работы, введите какое-то сообщение о завершении, а затем Console.ReadKey();
в консольном приложении.
Если вы можете изменить код app.exe, просто добавьте Console.In.Read()
, чтобы он дождался нажатия клавиши.
app.exe может закончиться с Console.ReadLine()
, полагая, что это тоже приложение С#, в котором вы управляете исходным кодом.
У вас есть одна из двух проблем, с учетом настройки вашего мастера/подчиненного приложения:
Для первой проблемы вам нужно подождать/заблокировать процесс для завершения (т.е. Process.WaitForExit()
.
Для второй проблемы, похоже, что подчиненное приложение выполнило то, что ему нужно (или выбрало исключение), и немедленно закрывается. Попробуйте запустить его с теми же параметрами из командной строки и проверить вывод.
Если у вас есть контроль над app.exe, вы должны знать, как он функционирует, поэтому я предполагаю, что у вас нет контроля над его внутренними работами. В этом случае вы можете попробовать передать флаг справки, который может или не может дать вам больше информации о том, как вызвать app.exe. Попробуйте что-то вроде этого:
private startApp()
{
string command = " -h"; //common help flag for console apps
System.Diagnostics.Process pRun;
pRun = new System.Diagnostics.Process();
pRun.EnableRaisingEvents = true;
pRun.Exited += new EventHandler(pRun_Exited);
pRun.StartInfo.FileName = "app.exe";
pRun.StartInfo.Arguments = command;
pRun.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal
pRun.Start();
pRun.WaitForExit();
}
private void pRun_Exited(object sender, EventArgs e)
{
//Do Something Here
}
Создайте новый текстовый файл, назовите его app.bat и поместите туда:
app.exe
pause
Теперь ваша форма указывает на этот файл bat.