如何启动流程c#不工作

如何启动流程c#不工作,c#,process.start,C#,Process.start,我正在尝试启动Wireshark进程,并将.pcap文件导出为纯文本 通过命令行,我可以进行导出,因此我知道参数是正确的,并且程序处于PATH环境中 有趣的是,今天早上我用过一次这段代码,它工作正常。后续运行时,无法转换该文件 这是我正在使用的代码 private void Button1Click(object sender, EventArgs e) { var stinfo = new ProcessStartInfo(); stinfo.FileName = @"c:\P

我正在尝试启动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操作符。由于“传递”错误,并且禁用了
UseShellExecute
,因此这将不起作用

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


此外,一旦您说“确定,将输出和错误重定向到我”,您就必须实际读取这些流。如果不这样做,当输出缓冲区中的空间不足时,应用程序将挂起。这可能就是代码神秘停止工作的原因-来宾应用程序编写的内容超出了缓冲区的处理能力。

不是参数,而是shell运算符。由于“传递”错误,并且禁用了
UseShellExecute
,因此这将不起作用

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


此外,一旦您说“确定,将输出和错误重定向到我”,您就必须实际读取这些流。如果不这样做,当输出缓冲区中的空间不足时,应用程序将挂起。这可能就是代码神秘地停止工作的原因-来宾应用程序编写的内容超出了缓冲区的处理能力。

进程通常看不到管道或重定向操作符后面的内容(>此处)。这是由shell解析的。您是否尝试过UseShellExecute=true?我没有,不知道这是否有用。但是我认为您的父进程需要从shell或debug选项启动,以包括输出重定向。否则,您必须读取子进程的StandardOutput,并将其以代码形式转储到文件中。

进程通常看不到管道或重定向操作符后面的内容(>此处)。这是由shell解析的。您是否尝试过UseShellExecute=true?我没有,不知道这是否有用。但是我认为您的父进程需要从shell或debug选项启动,以包括输出重定向。否则,您必须读取子进程的StandardOutput,并将其以代码形式转储到文件中。

调试时会发生什么?在此上下文中,“不工作”是什么意思?读取进程的输出。Ernst不工作,就是它没有执行程序并将pcap文件转换为纯文本。CodeCaster,输出窗口中没有错误。它显示的最后一项是线程0x32a0已退出,代码为0(0x0)。调试它时会发生什么?在此上下文中,“不工作”是什么意思?读取进程的输出。Ernst不工作,就是它没有执行程序并将pcap文件转换为纯文本。CodeCaster,输出窗口中没有错误。它显示的最后一项是线程0x32a0已退出,代码为0(0x0);示例:使用重定向操作符启动文章从未提及的遗留程序或.exe文件@BrianCook。它甚至没有重定向输出。我在程序第一次运行时添加了重定向,它将文件导出为纯文本。我删除了纯文本文件,再次运行程序,没有修改,它没有生成文件。这就是让人困惑的地方。我不知道它在重定向后不会读取,否则cmd行程序将不会转换为纯文本格式。@BrianCook
RedirectStandardOutput
表示“将标准输出重定向到
StandardOutput
stream属性”,而不是“重定向到文件”。最有可能的是,该文件已存在于以前的某次尝试中。如果在不读取流的情况下添加
RedirectStandardOutput
,则应用程序别无选择,只能挂起。即使你没有,它也不会生成文件。只要自己读取流并将其写入文件,这并不难:)Luaan,命令行中的redirect>符号必须在那里。tshark.exe希望这样,因此它知道从二进制到纯文本转换的文件名/文件类型。在这种情况下,RedirectStandardOutput可能不需要,我将暂时删除它,看看这是否允许它再次正确运行;示例:使用重定向操作符启动文章从未提及的遗留程序或.exe文件@BrianCook。它甚至没有重定向输出。我在程序第一次运行时添加了重定向,它将文件导出为纯文本。我删除了纯文本文件,再次运行程序,没有修改,它没有生成文件。这就是让人困惑的地方。我不知道它在重定向后不会读取,否则cmd行程序将不会转换为纯文本格式。@BrianCook
RedirectStandardOutput
表示“将标准输出重定向到
StandardOutput
stream属性”,而不是“重定向到文件”。最有可能的是,该文件已存在于以前的某次尝试中。如果在不读取流的情况下添加
RedirectStandardOutput
,则应用程序别无选择,只能挂起。即使你没有,它也不会生成文件。只要自己读取流并将其写入文件,这并不难:)Luaan,命令行中的redirect>符号必须在那里。tshark.exe希望这样,因此它知道从二进制到纯文本转换的文件名/文件类型。在这种情况下,可能不需要RedirectStandardOutput,我将暂时删除它,看看这是否允许它运行corre