Подтвердить что ты не робот

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

Я хочу запустить консольное приложение (например, app.exe) из события загрузки формы Windows. I'v попробовал System.Diagnostics.Process.Start(), но после открытия app.exe он немедленно закрывает его.

Есть ли способ запустить приложение app.exe и оставить его открытым?

4b9b3361

Ответ 1

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

System.Diagnostics.Process.Start( @"cmd.exe", @"/k c:\path\my.exe" );

Ответ 2

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

        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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

  • Ваше главное приложение открывается, показывая форму, эта форма запускает подчиненное приложение и немедленно закрывается, даже если подчиненное приложение все еще запущено.
  • Ваше главное приложение открывает, показывая форму, эта форма запускает подчиненное приложение, которое немедленно закрывается.

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

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

Ответ 7

Если у вас есть контроль над 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
}

Ответ 8

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

app.exe
pause

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