Определите, завершился ли процесс при запуске программы через CMD - PullRequest
0 голосов
/ 08 мая 2019

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

Я пробовал много разных способов проверить, вышла ли программа, используя ID процесса, даже используя цикл, к сожалению, я не могу заставить его работать.Я считаю, что это связано с тем, что я создал процесс, который запускает программу, используя командные строки, а не метод, указывающий на каталог для запуска программы.Причина, по которой я использовал командные строки, заключается в том, что путь к программе находится в программе (x86), которая не работала для меня из-за пробела, который я предполагаю.

Часть кода, которая запускает приложение

ProcessStartInfo start = new ProcessStartInfo("cmd.exe", "/c cd / & /x & cd PROGRA~2 & cd Truvelo & cd DCM & start dcm.exe");
int exitCode;
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
exitCode = proc.ExitCode;
}

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

System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcessesByName(sProcessName);
  if (proc.Length > 0)
  {
      MessageBox.Show(String.Format("{0}is  running!", sProcessName), sProcessName);
  }
  else
  {
      MessageBox.Show(String.Format("{0}is not running!", sProcessName), sProcessName);

   }

Я надеюсь, что кто-то можетпомогите мне логически определить, закрыл ли я приложение или код, который я пишу, чтобы знать, когда приложение запущено, а затем сообщите мне, как только приложение закроется

Спасибо

1 Ответ

0 голосов
/ 08 мая 2019

Вы используете cmd start, и эта команда не ожидает завершения запущенного приложения. Ваша переменная proc отслеживает начатый процесс, поэтому cmd не dcm, и эта переменная заканчивается, когда запускается dcm, а не заканчивается.

Вы можете либо добавить параметр команды /WAIT, либо не использовать команду start и просто выполнить dcm.exe напрямую.

/c cd / & /x & cd PROGRA~2 & cd Truvelo & cd DCM & start dcm.exe /WAIT

/c cd / & /x & cd PROGRA~2 & cd Truvelo & cd DCM & dcm.exe

или вообще не используйте cmd и просто запускайте dcm из c # еще более прямо:

new ProcessStartInfo(@"C:\Program Files (x86)\Truvelo\DCM\dcm.exe")
...