2010-08-26 129 views
2

我已经知道如何捕获控制台窗口的标准输出,但是我的问题是当我使用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参数。设置一些内部属性,然后挂钩到输出。然而,当涉及到

StdOutReceived += new DataReceivedHandler(Loggolás); 

和程序运行Loggolás方法把控制台的数据,它说,StandardOut没有设置,或者进程没有启动。

好:

  • StandardOut设置
  • 进程正在运行,因为我通过GetProcesses得到它
  • 在这个程序中,我不使用的Process.Start() - 因为它已经开始

寻求帮助。感谢yas: Péter

+1

+1:优秀的第一个问题,非常好问。我们需要更多像你这样的新用户:) – 2010-08-26 09:57:30

+0

[Capture from output:from unrelated process](http://stackoverflow.com/questions/429225/capture-output-from-unrelated-process) – 2010-08-26 10:00:58

+0

我检查过“Capture output来自不相关的进程“,并且在修改代码之后,我得到了相同的错误消息:StandardOut(没有这样的属性,BTW,只有StandardOutput)未设置,或者进程未启动。 – 2010-08-26 10:46:26

回答

0

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

其实我看到这个问题只有一个解决方法:从“> filename.txt”或这样的输出重定向参数开始。这会将所有内容填充到一个文件中,所以即使执行程序应用程序崩溃,如果您只是“只读”,也可以“重新连接”。还没有测试过,但我没有看到其他方式。

+0

对于那些有兴趣的人,有一个很好的文档,举例说明如何将控制台输出重定向到文件中:http://ss64.com/bash/syntax-redirection.html – 2010-08-26 20:45:36

+0

启动应用程序应该通过“cmd”作为程序名“/c ...参数...> 2>&1“作为参数。如果以“”作为程序名称(在startinfo中)启动应用程序,那么您将自行窃取输出。 – 2010-08-27 12:30:50