使用C#读取从win32应用程序工作的控制台应用程序的所有输出行

时间:2011-07-19 03:24:43

标签: c#

我有一个win32应用程序,我使用以下代码启动一个控制台应用程序:

public void ExecuteDecript(int element)
{
    string toquen = TaskList[element].MakeToquen();
    string cmdexePath = @"C:\Windows\System32\cmd.exe";
    string myApplication = @"d:/SL3-xgold/tools/oclHashcat-lite-0.05/" + toquen;
    string cmdArguments = String.Format("/K {0}", myApplication);

    OCLProcess = new Process();
    OCLProcess.StartInfo.FileName = cmdexePath;
    OCLProcess.StartInfo.Arguments = cmdArguments;
    OCLProcess.StartInfo.UseShellExecute = false;
    OCLProcess.StartInfo.RedirectStandardOutput = true;
    OCLProcess.OutputDataReceived += OutputHandler;

    OCLProcess.Start();
    OCLProcess.BeginOutputReadLine();            
}

private static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
    if (!String.IsNullOrEmpty(outLine.Data))
    {
        MessageBox.Show(outLine.Data);
    }
}

问题是我读取了控制台应用程序的所有行,但最后一行只在关闭控制台应用程序时读取。关于它的任何理论?

1 个答案:

答案 0 :(得分:1)

上面的代码应该没有任何问题。但是问题可能出现在控制台应用程序中,可能是在最后一次写入时Console.Write而不是Console.WriteLine,因此在应用程序终止之前不会被读取,因此刷新那条小溪。如果这没有帮助,请为您的控制台应用程序发布一些代码,以进一步诊断问题。