从WPF应用程序中的进程内本机Matlab dll捕获控制台输出

时间:2015-11-06 21:16:26

标签: c# .net wpf matlab stdout

我有C#/ WPF应用程序调用第三方本机dll(由Matlab编译器创建)来执行密集计算,所有这些都在一个进程中完成。这个DLL将一堆调试信息转储到控制台,大概是通过写入stdout和/或stderr。这些信息对用户来说毫无意义,但在出现问题时可以大大有助于调试。如果我将我的应用程序类型设置为控制台应用程序,我会在实际应用程序窗口旁边显示一个控制台窗口,并且可以看到调试输出,但用户也可以看到它。 有没有办法让我将自己进程的stdout / stderr重定向或回显到日志文件而无需在屏幕上显示控制台窗口

不起作用的事情:

  1. 使用Console.SetOut() / SetError()。这似乎只影响通过Console对象本身的写入,这显然不是本机代码中发生的情况。
  2. 挂钩Process.GetCurrentProcess().OutputDataReceived事件。这只有在进程以一个标志启动时才有效,这个标志表明它应该重定向stdout,这不是我可以为事后设置的事情(据我所知)。
  3. Process.GetCurrentProcess().StandardOutput阅读。同样,这需要在启用重定向的情况下启动进程。
  4. P /调用SetStdHandle。这允许我将stdout / stderr从我自己的C#代码重定向到文件,但原生dll不受影响。
  5. 从命令行重定向(MyApp.exe > logfile.txt 2>&1 工作,所以我确定dll正在写入stdout和stderr,但所有尝试重定向后的本机一半的东西启动这个过程失败了。

0 个答案:

没有答案