控制台信息到窗口

时间:2010-08-26 09:53:46

标签: c#

我已经知道如何捕获控制台窗口的标准输出,但是当我使用GetProcesses / orByName获取进程并且不自己启动()时我遇到了问题。这是代码:

public ProcessCaller(ISynchronizeInvoke isi, Process MárFutóAlkalmazás)
  : this(isi)
{
  //alapbeállítások
  FileName = MárFutóAlkalmazás.StartInfo.FileName;
  Arguments = MárFutóAlkalmazás.StartInfo.Arguments;
  WorkingDirectory = MárFutóAlkalmazás.StartInfo.WorkingDirectory;

  //egyedi beállítások
  process = MárFutóAlkalmazás;
  process.EnableRaisingEvents = true;
  process.StartInfo.CreateNoWindow = true;
  process.StartInfo.UseShellExecute = false;
  process.StartInfo.RedirectStandardOutput = true;
  process.StartInfo.RedirectStandardError = true;
  new MethodInvoker(ReadStdOut).BeginInvoke(null, null);
  new MethodInvoker(ReadStdErr).BeginInvoke(null, null);

  //események
  StdErrReceived += new DataReceivedHandler(Loggolás);
  StdOutReceived += new DataReceivedHandler(Loggolás);

  //kilépés jelzése
  process.Exited += new EventHandler(OnKilépés);
}

因此,此方法获取并已将应用程序作为MárFutóAlkalmazás参数运行。设置一些内部属性,然后挂钩到Output。但是当谈到

StdOutReceived += new DataReceivedHandler(Loggolás);

并且程序运行Loggolás方法来获取控制台数据,它表示未设置StandardOut,或者该进程未启动。

好:

  • 设置了StandardOut
  • 进程正在运行,因为我是通过GetProcesses获得的
  • 在这个例程中,我不使用process.Start() - 因为它已经启动

寻求帮助。谢谢你: 彼得

1 个答案:

答案 0 :(得分:0)

好的,所以在询问并检查网络后,我了解到你无法挂钩未启动的输出。因此,如果执行程序应用程序崩溃,则必须重新启动控制台应用程序才能捕获输出。你需要.Start()。

实际上我只看到了这个问题的一个救赎:从“> filename.txt”或这样的输出重定向参数开始。这会将所有内容都填入文件中,因此即使执行程序应用程序崩溃,如果您“只读”,也可以“重新连接”。还没有测试过,但我没有别的办法。