我正在尝试从我的C#程序ping本地计算机。为此,我使用以下代码。
System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
proc.FileName = @"C:\windows\system32\cmd.exe";
proc.Arguments = @"""ping 10.2.2.125""";
System.Diagnostics.Process.Start(proc);
这将打开一个命令行窗口,但不会调用ping。是什么原因?
答案 0 :(得分:35)
你需要包含“/ c”参数来告诉cmd.exe你的意思:
proc.Arguments = "/c ping 10.2.2.125";
(你可以直接调用ping.exe。有时这是合适的,以及更容易调用cmd
的时间。)
答案 1 :(得分:7)
您可以使用System.Net.NetworkInformation.Ping
class。
public static int GetPing(string ip, int timeout)
{
int p = -1;
using (Ping ping = new Ping())
{
PingReply reply = ping.Send(_ip, timeout);
if (reply != null)
if (reply.Status == IPStatus.Success)
p = Convert.ToInt32(reply.RoundtripTime);
}
return p;
}
答案 2 :(得分:7)
public void ExecuteCommand(String command)
{
Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.Arguments = command;
p.StartInfo = startInfo;
p.Start();
}
用法: ExecuteCommand(@"/c ping google.com -t");
不要忘记使用/c
答案 3 :(得分:6)
cmd /C
或
cmd /K
可能/ C因为/ K没有立即终止
答案 4 :(得分:2)
要直接调用ping命令,请按照您的问题进行操作,但将cmd.exe
替换为ping.exe
:
ProcessStartInfo proc = new ProcessStartInfo();
proc.FileName = @"C:\windows\system32\ping.exe";
proc.Arguments = @"10.2.2.125";
Process.Start(proc);
答案 5 :(得分:0)
如果您正在寻找使用外部命令行可执行文件的更高级方法,您可以尝试CliWrap。例如,您可以使用它轻松实时流式传输 ping 结果,因为它们是由底层进程写入控制台的:
var cmd = Cli.Wrap("ping").WithArguments("stackoverflow.com");
await foreach (var evt in cmd.ListenAsync())
{
if (evt is StandardOutputCommandEvent stdOut)
{
Console.WriteLine(stdOut.Text);
}
}