使用cmd执行nslookup命令返回结果StandardOutput.ReadToEnd读取不全是什么原因??在线等待。。
我想使用cmd命令来执行nslookup命令,把运行结果读取出来,但是在某些时候读出来的结果不全,请问是什么原因??
代码是这样的:
string dosCommand = "nslookup www.sohkdindjf.com 8.8.8.8 ";
Process p = new Process(); //创建进程对象
p.StartInfo.FileName = "cmd.exe"; //设定需要执行的命令
p.StartInfo.Arguments = " /C " + dosCommand; //设定参数,其中的“/C”表示执行完命令后马上退出
p.StartInfo.UseShellExecute = false; //不使用系统外壳程序启动
p.StartInfo.RedirectStandardInput = true; //重定向输入
p.StartInfo.RedirectStandardOutput = true; //重定向输出
p.StartInfo.RedirectStandardError = true; //重定向错误
p.StartInfo.CreateNoWindow = true; //不创建窗口
try
{
if (p.Start()) //开始进程
{
if (milliseconds == 0)
p.WaitForExit(); //这里无限等待进程结束
else
p.WaitForExit(milliseconds); //这里等待进程结束,等待时间为指定的毫秒
output = p.StandardOutput.ReadToEnd(); //读取进程的输出
}
}
catch
{ }
finally
{
if (p != null)
p.Close();
}
}
return output;
output的结果是:
"服务器: google-public-dns-a.google.com\r\nAddress: 8.8.8.8\r\n\r\n"
但是如果在cmd命令窗口执行结果应该是这样的:
服务器: google-public-dns-a.google.com
Address: 8.8.8.8
*** google-public-dns-a.google.com 找不到 www.sohkdindjf.com: Non-existent domain
两个显示的内容不一样,怎么是C#程序里output读出的结果与在cmd命令窗口执行的结果一样?? 或者C#有什么类可以执行nslookup一样的功能?
------解决方案--------------------
Process nslookup = new Process()
{
StartInfo = new ProcessStartInfo("nslookup")
{
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false
}
};
nslookup.Start();
nslookup.StandardInput.WriteLine("set type=srv");
nslookup.StandardInput.WriteLine("");
nslookup.StandardInput.Flush();
StringBuilder output = new StringBuilder();
while (nslookup.StandardOutput.Peek() > 0)
{
output.AppendFormat("{0}\n", nslookup.StandardOutput.ReadLine());
}
或
IPHostEntry hostEntry = Dns.GetHostEntry(hostNameOrAddress);
IPAddress[] ips = hostEntry.AddressList;
------解决方案--------------------
其实是你执行出错了。。。那是error不是Output
------解决方案--------------------
p.StandardError.ReadToEnd()