как выполнить консольное приложение от формы окон?

Я хочу запустить консольное приложение (например, app.exe) от события загрузки формы окон. I'v попробовал Систему. Диагностика. Процесс. Запустите (), Но после того, как это открывает app.exe, это закрывает его immidiately.

Есть ли какой-либо способ, которым я могу выполнить app.exe и оставить это открытым?

13
задан Chris 3 May 2014 в 00:03
поделиться

8 ответов

Если вы просто хотите, чтобы окно консоли оставалось открытым, вы можете запустить его с помощью примерно такой команды :

System.Diagnostics.Process.Start( @"cmd.exe", @"/k c:\path\my.exe" );
12
ответ дан 1 December 2019 в 22:38
поделиться

Если вы можете изменить код app.exe, просто добавьте Console.In.Read () , чтобы он ждал нажатия клавиши.

1
ответ дан 1 December 2019 в 22:38
поделиться

Если у вас есть контроль над 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
}
1
ответ дан 1 December 2019 в 22:38
поделиться

Попробуйте сделать следующее:

        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();

Я думаю, это поможет вам добиться желаемого поведения. Предполагая, что вы не просто пытались увидеть вывод в командном окне. Если вы просто хотите увидеть результат, у вас уже есть несколько версий этого ответа. Именно так вы можете запускать свое приложение и держать консоль открытой.

Надеюсь, это поможет. Удачи.

3
ответ дан 1 December 2019 в 22:38
поделиться

Создайте новый текстовый файл, назовите его app.bat и поместите его туда:

app.exe
pause

Теперь ваша форма должна указывать на этот файл bat.

0
ответ дан 1 December 2019 в 22:38
поделиться

app.exe может заканчиваться на Console.ReadLine () , если это тоже приложение C #, в котором вы управляете исходным кодом.

1
ответ дан 1 December 2019 в 22:38
поделиться

Если app.exe ничего не делает или быстро завершает свою работу (т.е. просто печатает «Hello World» и возвращается), он будет вести себя так, как вы только что объяснили. Если вы хотите, чтобы app.exe оставался открытым после завершения своей работы, поместите в консольное приложение какое-то сообщение о завершении, за которым следует Console.ReadKey (); .

2
ответ дан 1 December 2019 в 22:38
поделиться

У вас одна из двух проблем, учитывая настройку ведущего/ведомого приложения:

  1. Ваше ведущее приложение открывается, отображает форму, эта форма запускает ведомое приложение и немедленно закрывается, хотя ведомое приложение все еще работает.
  2. Ваше ведущее приложение открывается, отображает форму, эта форма запускает ведомое приложение, которое немедленно закрывается.

Для решения первой проблемы вам нужно подождать/заблокировать завершение процесса (т.е. Process.WaitForExit()).

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

1
ответ дан 1 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: