我正在尝试列出 dumpcap.exe 可以捕获数据的受支持接口。
我要运行的命令是“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);
}
当我调试时,执行根本不会进入我的 while 循环。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();