Продолжить после определенной команды в terminal finish

#c# #cmd #process #terminal

#c# #cmd #процесс #терминал

Вопрос:

мне нужно было задать вопрос, который я действительно не мог найти в Интернете.. я использую Process для открытия cmd в моем приложении на c #.. мне нужно передать некоторые команды, но после каждой команды мне нужно убедиться, что эта команда завершена, чтобы я мог продолжить другую !.. как это возможно с system.diagnostics… вот мой код, который я пробовал..

     var startInfo = new ProcessStartInfo
      {
          FileName = "cmd.exe",
          RedirectStandardInput = true,
          RedirectStandardOutput = true,
          UseShellExecute = false,
          CreateNoWindow = false,
          WorkingDirectory = @"E:/Visual Studio 2013/"   project_Name   "/packages/NUnit.ConsoleRunner.3.4.1/tools"
      };

      var process = new Process { StartInfo = startInfo };

      process.Start();
      process.StandardInput.WriteLine("nunit3-console.exe E:/Debug/Report_Testing.dll");


      process.WaitForExit();    
  

ожидание выхода здесь зависает бесконечно, и я не могу передать эту строку кода.
какое решение для этого !?

Ответ №1:

Попробуйте добавить опцию /c nunit3-console.exe E:/Debug/Report_Testing.dll .

Как и сейчас, он будет запущен cmd , и приглашение останется активным после команды. WaitForExit ожидает cmd завершения и никогда не завершится.

Комментарии:

1. я не могу вас понять, извините, я хочу знать, когда команда завершится… что делает параметр /k ? также вы хотите, чтобы я добавил это в строку writeline??

2. @OmarEl-elamy запускается ваш процесс cmq , а не бегун nunit, поэтому он привязан к нему для завершения. Если вы хотите закрыть его в своем коде, вы должны отправить exit в командную строку, но я не думаю, что это было бы действительно элегантно.

3. Тестовый запускатель выполняется как дочерний элемент cmd, поэтому, даже если запуск завершается, родительский запуск не выполняется.

4. /c не распознается как внутренняя или внешняя команда? есть ли что-то, что я должен загрузить?

5. итак, что я мог бы сделать, чтобы даже закрыть терминал после завершения запуска? т. е. После завершения команды .. это также может быть вариантом??

Ответ №2:

Мне удалось добраться до решения:

Я добавил это в свою команду writeline и изменил ее так:

       process.StandardInput.WriteLine("nunit3-console.exe E:/Debug/Report_Testing.dll"   "amp;"  "exit");
  

// Затем используйте ожидание завершения
процесса.WaitForExit();

этим я убедился, что команда выполнена.

Комментарии:

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

2. одноразовая команда как?? я просто хочу закончить его, а затем выйти??