Я пытаюсь перечислить поддерживаемые интерфейсы, на которых dumpcap.exe может собирать данные.Обработка стандартного вывода в C#, возвращающем пустую строку
Команда я хочу запустить, «dumpcap.exe -D»
В моей системе, это дает выход как: -
1. \Device\NPF_{1B627AA8-2A1D-4C90-B560-517CF71B33A5} (Intel(R) 825
Network Connection)
2. \Device\NPF_{7ECC4D31-DF17-49AB-960D-628D0580F3C6} (Microsoft)
Я пытаюсь прочитать выше вывод по запуск той же команды из приложения WPF C#. У меня есть следующий код, чтобы сделать так: -
Process proc = new Process();
//set the path to dumpcap.exe (verified by me)
proc.StartInfo.FileName = "..\\..\\..\\..\\..\\Dumpcap\\dumpcap.exe";
StringBuilder dumpcapArgs = new StringBuilder();
dumpcapArgs.Append("-D");
proc.StartInfo.Arguments = dumpcapArgs.ToString();
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
while (!proc.StandardOutput.EndOfStream)
{
string line = proc.StandardOutput.ReadLine();
MessageBox.Show(line);
}
Когда я отладки, выполнение не идет в моем цикле в то время как у всех. StandardOutput уже находится в конце потока. Копая дальше в класс класса StandardOutput, я вижу много System.NotSupportedExceptions по длине, положению и т. Д.
Что, возможно, не так с вышеуказанным кодом?
Быстрого наблюдение
Я попробовал другой образец C# консольное приложение с помощью следующего кода:
Process proc = new Process();
proc.StartInfo.FileName = "C:\\Karan\\Dumpcap\\dumpcap.exe";
proc.StartInfo.Arguments = "-D";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
Console.WriteLine(proc.StandardOutput.ReadToEnd());
proc.WaitForExit();
Это печатает вывод, как ожидалось!
Однако, если я пытаюсь прочитать стандартную выходную строку в строковой переменной, я получаю пустую строку.
Например, это возвращает мне пустую строку: -
Process proc = new Process();
proc.StartInfo.FileName = "C:\\Karan\\Dumpcap\\dumpcap.exe";
proc.StartInfo.Arguments = "-D";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
String output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
К сожалению, я пропустил эту линию при копировании кода из Visual Studio. моя вина. Обновлено. – Karan