Полагаю, вы все неправильно поняли мой вопрос и закрыли его на Как запустить Команду в C # и извлечь из нее данные?
Я также сказал в этом посте: - хочуЗапустите команду из командной строки и хотите получить ее вывод и отобразить ее вывод.При необходимости хотите закрыть процесс и отобразить ошибку или соответствующее сообщение.Чтобы остановить процесс, я должен нажать клавишу «F4» в командной строке. Пока процесс не будет остановлен или остановлен, он должен быть только живым.
Я создал класс для обработки запущенного cmd. ИЯ продолжаю получать выходные данные. Но при чтении каждой выходной строки я хочу остановить или выбросить исключение, если обнаружил что-либо неправильное в выходных данных.
Я пытаюсь подключиться к серверу через cmd. Сервер продолжает выдавать выходные данные.Предположим, что сервер выдал вывод как: Попытка запуска ..... Cananot загрузить файл ..... Выход
При получении вывода я хочу проверить наличие строк типа "Не удается найти файл", "ПодключеноУспешно и т. Д. И установите свойства ccordingly (например, connected = true, errorMsg = "Не удается найти файл". Когда я вызываю класс, я могу позаботиться об этих свойствах и остановить, если найден подключенный == true или errorMsg.length> 0.С этим сообщите пользователю, что «Соединение установлено, или сообщение об ошибке, сообщающее о« Не удается загрузить файл »», и отключите сервер, если errorMsg найден.
Я нигде не обнаружил никаких манипуляций с полученным выводом, и вот тут я застрял.Я нашел много в интернете.Я застрял и пытаюсь выяснить эту часть за последние 3-4 дня.Тогда разместите здесь.
Мне нужна помощь в этом.Пожалуйста, помогите мне.Если потребуется, я приведу фрагменты кода psot.Но, пожалуйста, помогите мне.И не закрывайте эту ветку, так как ответили без полного понимания моего вопроса.Это не дубликат.
Мой код класса:
public int ConnectToServer()
{
int error = 0;
connected = false;
try
{
process = Process.Start(processInfo);
process.BeginOutputReadLine();
process.OutputDataReceived += new DataReceivedEventHandler(Process_OutputDataReceived);
//if (errorMsg.Length > 0)
// throw new Exception(errorMsg);
}
catch (Exception e)
{
Console.WriteLine("Error Processing ConnectToServer : " + e.Message);
connected = false;
errorMsg = e.Message;
error = -1;
return error;
}
return error;
}
private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
errorMsg = "";
connected = false;
string d = e.Data;
if (!string.IsNullOrEmpty(d))
{
if (sb != null)
sb.Append(d + "\n");
Console.WriteLine("LINE = " + d);
if (d.IndexOf("Initialization Completed") > 0)
{
connected = true;
Console.WriteLine("********* Connected = " + connected);
}
else if (isInValidLine(d))
{
//throw new Exception(d);
connected = false;
errorMsg = d;
return;
}
}
return;
}
private bool isInValidLine(string line)
{
if (line.IndexOf("Cannot load file") > 0)
{
errorMsg = line;
return true;
}
return false;
}
ВЫШЕ КОД КЛАССА ПРАВИЛЬНО С МОИМИ ТРЕБОВАНИЯМИ?В имплементации:
while (!oc.Connected)
{
timepassed = (int)(DateTime.Now - start).TotalMilliseconds;
if (timepassed > timeout)
{
oc.DisconnectServer();
connectedToVpn = false;
throw new Exception("NotConnectedException");
} else if (oc.ErrorMessage.Length > 0)
{
oc.DisconnectServer();
connectedToVpn = false;
throw new Exception(oc.ErrorMessage);
}
Thread.Sleep(100);
}
Вот что я делаю, когда я получаю строку вывода, я проверяю, является ли она подключенной или недействительной.Если он недействителен, я устанавливаю строку как errorMsg.В моем цикле while я продолжаю проверять наличие Connected и errorMessage, но значение errorMessage остается только "".Он никогда не обновляется, что говорит мне, что обработка выходного кода никогда не выполняется.Ни в режиме отладки я не нахожу курсор в этой строке, но строка = отображается в консоли, как правило, правильно.Итак, не понимаю, что происходит и где.
Надеюсь, это поможет вам лучше понять.
Спасибо