将exe的标准输出重定向到我的控制台应用程序

时间:2012-12-21 16:17:29

标签: c# console-application redirectstandardoutput

我想在我的控制台应用程序中使用一个名为jlink.exe的可执行文件。因为jlink.exe不是.net应用程序,所以我无法引用它并调用它的方法。 因此我想用它来阅读它的输出

当我从Windows资源管理器启动该exe时,它的外观如下: enter image description here

然后等待命令。如果我输入mem 88 2,我就会回来:

enter image description here

现在我想对我的.net控制台应用程序执行相同的操作,读取它的标准输出但由于某种原因我无法读取输出。这就是我所拥有的:

    // change working directory
    Directory.SetCurrentDirectory(@"C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.4 Evaluation\arm\bin");

    Process p = new Process( )
    {
        StartInfo = new ProcessStartInfo( @"jlink.exe" )
        {
            UseShellExecute = false ,
            RedirectStandardOutput = true ,
            RedirectStandardInput = true
        }
    };

    p.Start( );                       

    StreamWriter standardInput = p.StandardInput;
    StreamReader standardOutput = p.StandardOutput;

    var line = string.Empty;

    while ( ( line = standardOutput.ReadLine( ) ) != null )
    {                
        Console.WriteLine( line );                
    }

为什么当我运行该代码时,我只得到一个黑色窗口...我没有得到与运行该可执行文件时相同的输出。当我对其他可执行文件运行该代码时,它工作得很好。

如果我然后输入mem 88 2并按ENTER键则没有任何反应。如果我再按一次输入,那么我终于得到了我想要的额外内容。为什么我使用该可执行文件获得此行为?

修改

我看过类似的问题,例如:

process.standardoutput.ReadToEnd() always empty?

我认为我做错了什么。我想这个可执行文件有些奇怪。要使用该可执行文件,您可以在http://supp.iar.com/Download/SW/?item=EWARM-EVALhttp://www.iar.com/en/Products/IAR-Embedded-Workbench/ARM/下载该文件。然后转到C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.4 Evaluation\arm\bin并执行jlink.exe(如果没有通过USB连接板,则会出现错误但无关紧要。错误消息也不会显示)。

0 个答案:

没有答案