如何启动进程 c# 不工作

How to start a Process c# Not working

我正在尝试启动 Wireshark 进程,并将 .pcap 文件导出为纯文本。

我可以从命令行进行导出,所以我知道参数是正确的并且程序在 PATH 环境中。

有趣的是,今天早上我用了这段代码一次,它工作正常。随后运行它无法转换文件。

这是我正在使用的代码。

private void Button1Click(object sender, EventArgs e)
{
    var stinfo = new ProcessStartInfo();
    stinfo.FileName = @"c:\Program Files (x86)\Wireshark\tshark.exe";
    stinfo.Arguments = "-V -r " + @"c:\Brian_00001_20151110133639.pcap" + " > " + @"c:\Brian_00001_20151110133639.txt";
    stinfo.CreateNoWindow = true;
    stinfo.UseShellExecute = false;
    stinfo.RedirectStandardOutput = true;
    stinfo.RedirectStandardError = true;
    Process myProcess = Process.Start(stinfo);
    myProcess.Start();
    myProcess.WaitForExit();
}

谢谢,

> 不是参数,它是 shell 运算符。因为你 "passing" 它错了,而且因为你禁用了 UseShellExecute,所以这是行不通的。

您需要手动进行重定向:)

此外,一旦您说 "sure, redirect output and error to me",您实际上必须 阅读 那些流。如果不这样做,应用程序将在用完输出缓冲区中的 space 时挂起。这可能就是您的代码神秘地停止工作的原因 - 来宾应用程序写入的内容超出了缓冲区的处理能力。

进程通常看不到管道或重定向运算符(> 此处)之后的任何内容。这是由 shell 解析的。你试过 UseShellExecute = true 吗?我没有,不知道这是否会做任何事情。但我认为您的父进程需要从 shell 或调试选项启动以包含该输出重定向。否则,您将不得不读取子进程的 StandardOutput 并将其转储到您自己的代码文件中。 https://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput%28v=vs.110%29.aspx