我已经知道如何捕获控制台窗口的标准输出,但是当我使用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,或者该进程未启动。
好:
寻求帮助。谢谢你: 彼得
答案 0 :(得分:0)
好的,所以在询问并检查网络后,我了解到你无法挂钩未启动的输出。因此,如果执行程序应用程序崩溃,则必须重新启动控制台应用程序才能捕获输出。你需要.Start()。
实际上我只看到了这个问题的一个救赎:从“> filename.txt”或这样的输出重定向参数开始。这会将所有内容都填入文件中,因此即使执行程序应用程序崩溃,如果您“只读”,也可以“重新连接”。还没有测试过,但我没有别的办法。