我有C#/ WPF应用程序调用第三方本机dll(由Matlab编译器创建)来执行密集计算,所有这些都在一个进程中完成。这个DLL将一堆调试信息转储到控制台,大概是通过写入stdout和/或stderr。这些信息对用户来说毫无意义,但在出现问题时可以大大有助于调试。如果我将我的应用程序类型设置为控制台应用程序,我会在实际应用程序窗口旁边显示一个控制台窗口,并且可以看到调试输出,但用户也可以看到它。 有没有办法让我将自己进程的stdout / stderr重定向或回显到日志文件而无需在屏幕上显示控制台窗口?
不起作用的事情:
Console.SetOut()
/ SetError()
。这似乎只影响通过Console
对象本身的写入,这显然不是本机代码中发生的情况。Process.GetCurrentProcess().OutputDataReceived
事件。这只有在进程以一个标志启动时才有效,这个标志表明它应该重定向stdout,这不是我可以为事后设置的事情(据我所知)。Process.GetCurrentProcess().StandardOutput
阅读。同样,这需要在启用重定向的情况下启动进程。SetStdHandle
。这允许我将stdout / stderr从我自己的C#代码重定向到文件,但原生dll不受影响。从命令行重定向(MyApp.exe > logfile.txt 2>&1
) 工作,所以我确定dll正在写入stdout和stderr,但所有尝试重定向后的本机一半的东西启动这个过程失败了。