使用c#从win32应用程序中读取控制台应用程序的所有输出行

本文关键字:应用程序 输出 控制台 读取 win32 使用 | 更新日期: 2023-09-27 18:02:41

我有一个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);
    }
}

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

使用c#从win32应用程序中读取控制台应用程序的所有输出行

以上代码应该可以正常运行。然而,问题很可能出现在控制台应用程序上,也许在最后一次写Console.Write而不是Console.WriteLine时,它将不会被读取,直到应用程序终止并刷新该流。如果没有帮助,请发布一些代码为您的控制台应用程序进一步诊断问题。