以前在玩Windows 的时候几台电脑连起来需要测试网络连接是否正常经常用的一个命令就是Pingexe感觉相当实用
现在为我们提供了强大的功能来调用外部工具并通过重定向输入输出获取执行结果下面就用一个例子来说明调用Pingexe命令实现网络的检测希望初学者有所帮助
首先我们用使用Process类来创建独立的进程导入SystemDiagnostics
using SystemDiagnostics
实例一个Process类启动一个独立进程
Process p = new Process()
Process类有一个StartInfo属性这个是ProcessStartInfo类包括了一些属性和方法下面我们用到了他的几个属性
设定程序名
pStartInfoFileName = cmdexe
关闭Shell的使用
pStartInfoUseShellExecute = false
重定向标准输入
pStartInfoRedirectStandardInput = true
重定向标准输出
pStartInfoRedirectStandardOutput = true
重定向错误输出
pStartInfoRedirectStandardError = true
设置不显示窗口
pStartInfoCreateNoWindow = true
上面几个属性的设置是比较关键的一步
既然都设置好了那就启动进程吧!
pStart()
输入要执行的命令这里就是ping了
pStandardInputWriteLine(ping n )
pStandardInputWriteLine(exit)
从输出流获取命令执行结果
string strRst = pStandardOutputReadToEnd()
在本机测试得到如下结果
Microsoft Windows [Version ]\r\n(C)
版权所有 Microsoft Corp\r\n\r\nD
\\himuraz\\csharpproject\\ZZ\\ConsoleTest\\bin\\
Debug>ping n \r\n\r\r\nPinging
with bytes of data
\r\r\n\r\r\nReply from bytes= time<ms
TTL=\r\r\n\r\r\nPing statistics
for \r\r\n Packets Sent =
Received = Lost = (% loss)
\r\r\nApproximate round trip times in milliseconds\r\r\n
Minimum = ms Maximum = ms
Average = ms\r\r\n\r\nD
\\himuraz\\csharpproject\\ZZ\\ConsoleTest\\bin\\Debug>exit\r\n
有了输出结果那还有什么好说的分析strRst字符串就可以知道网络的连接情况了
下面是一个完整的程序当然对Pingexe程序执行的结果不全读者可以进一步修改
完整代码如下
using System;
using SystemDiagnostics;
namespace ZZ
{
class ZZConsole
{
[STAThread]
static void Main(string[] args)
{
string ip = ;
string strRst = CmdPing(ip);
ConsoleWriteLine(strRst);
ConsoleReadLine();
}
private static string CmdPing(string strIp)
{
Process p = new Process();
pStartInfoFileName = cmdexe;
pStartInfoUseShellExecute = false;
pStartInfoRedirectStandardInput = true;
pStartInfoRedirectStandardOutput = true;
pStartInfoRedirectStandardError = true;
pStartInfoCreateNoWindow = true;
string pingrst;
pStart();
pStandardInputWriteLine(ping n +strIp);
pStandardInputWriteLine(exit);
string strRst = pStandardOutputReadToEnd();
if(strRstIndexOf((% loss))!=)
pingrst = 连接;
else if( strRstIndexOf(Destination host unreachable)!=)
pingrst = 无法到达目的主机;
else if(strRstIndexOf(Request timed out)!=)
pingrst = 超时;
else if(strRstIndexOf(Unknown host)!=)
pingrst = 无法解析主机;
else
pingrst = strRst;
pClose();
return pingrst;
}
}
}
总结这里就是为了说明一个问题不但是Ping命令只要是命令行程序或者是Dos内部命令我们都可以用上面的方式来执行它并获取相应的结果并且这些程序的执行过程不会显示出来如果需要调用外部程序就可以嵌入到其中使用了