Ответ 1
Вам нужно включить аргумент "/c", чтобы сообщить cmd.exe, что вы имеете в виду:
proc.Arguments = "/c ping 10.2.2.125";
(Вы можете напрямую вызвать ping.exe. Бывают моменты, когда это подходит, и времена, когда проще называть cmd
.)
Я пытаюсь выполнить 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 не вызывается. В чем причина?
Вам нужно включить аргумент "/c", чтобы сообщить cmd.exe, что вы имеете в виду:
proc.Arguments = "/c ping 10.2.2.125";
(Вы можете напрямую вызвать ping.exe. Бывают моменты, когда это подходит, и времена, когда проще называть cmd
.)
Вы можете просто использовать класс System.Net.NetworkInformation.Ping
.
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;
}
cmd /C
или
cmd /K
Вероятно/C, потому что /K не заканчивается сразу
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
Чтобы вызвать команду 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);