#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. одноразовая команда как?? я просто хочу закончить его, а затем выйти??