我想你们都误解了我的问题并在How to run a Command in C# and retrieve data from it?
关闭了我在那篇文章中也曾说过: - 想要从命令promt运行一个命令,并希望它的输出和操作它的输出。如果需要,请关闭进程并显示错误或相应的消息。要停止这个过程,我必须在命令提示符下按“F4”键。直到进程被停止或被杀死,它必须只是活着。
我已经创建了一个类来处理运行cmd。而且我一直在获得输出。但是在读取输出的每一行时我想停止或抛出异常,如果在输出中发现任何不正确的东西。
我想通过cmd连接到服务器。服务器继续提供输出。假设服务器输出为: 试着开始...... Cananot加载文件 ..... 离开
在检索输出时,我想检查“无法找到文件”,“已连接成功等”等行,并按照设置属性(如connected = true,errorMsg =“找不到文件”。我在哪里调用类,我可以照顾那些proeprties并停止,如果发现连接== 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进行chekcing,但errorMessage的值仅保留为“”。它永远不会更新,这告诉我从不执行处理输出代码。在调试模式下我也没有找到该行的光标,但是在控制台中显示了Line =。所以,不明白出了什么问题,在哪里。
希望这有助于您更好地理解。
由于
答案 0 :(得分:0)
一旦你重定向了你执行过程的标准输出,就可以解析你收到的内容,我相信也是一行一行,然后你可以发布命令来控制你的过程。
读取您已重定向标准输出的输出,要发送输入,您还应该重定向该过程的标准输入。