如何捕获EXE文件C#返回的响应

时间:2015-04-19 11:28:46

标签: c#

我想将param传递给另一个也由c#开发的exe文件。 我知道如何从我的应用程序传递参数到exe文件。这样我就可以将param传递给exe文件

Process p= new Process();
p.StartInfo.FileName = "demo.exe";
p.StartInfo.Arguments = "param1 param2";
p.Start();
p.WaitForExit();

现在demo.exe文件将完成一些工作,并将返回一些数据。我想在我的最后捕获这些数据。所以引导我在我的代码中改变以捕获demo.exe文件的响应返回。帮我修改代码。感谢

可能在解决方案之下可能会解决我的问题。我会测试它。 适当地创建Process对象时设置StartInfo:

var proc = new Process {
    StartInfo = new ProcessStartInfo {
        FileName = "program.exe",
        Arguments = "command line arguments to your executable",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};

then start the process and read from it:

proc.Start();
while (!proc.StandardOutput.EndOfStream) {
    string line = proc.StandardOutput.ReadLine();
    // do something with line
}

4 个答案:

答案 0 :(得分:1)

一种可能的解决方案是使用RedirectStandardOutput并将结果存储在文件中:

using(Process proc = new Process())
{
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.FileName = <your exe>;
    proc.StartInfo.Arguments = <your parameters>;
    proc.StartInfo.RedirectStandardOutput = true;
    proc.OutputDataReceived += LogOutputHandler;
    proc.Start();
    proc.BeginOutputReadLine();
    proc.WaitForExit();
}

private static void LogOutputHandler(object proc, DataReceivedEventArgs outLine)
{
    <write your result to a file here>
}

答案 1 :(得分:0)

简单的解决方案是老式的流程退出代码。

一旦进程终止,您就可以使用p.ExitCode来捕获代码中的结果。

此外,demo.exe需要在退出前设置Environment.ExitCode

通常,0用于报告成功。

答案 2 :(得分:0)

如果只是int,你可以检查进程的ExitCode。 否则你可以使用WCF管道在进程之间进行通信

答案 3 :(得分:0)

main的返回值为'void',因此您无法返回任何项目。您可以使用标准输出作为流来传回信息。一种简单的方法是将XML流返回给调用程序,该程序很容易被解析。