【问题标题】:Is it possible to capture/redirect the standard output of a process that I did not launch, in .net?是否可以在.net 中捕获/重定向我未启动的进程的标准输出?
【发布时间】:2011-06-06 23:04:38
【问题描述】:

如果我知道进程标识符,.net 中是否有某种机制(或作为最后手段的 pinvoke)来捕获/重定向我未启动的进程的标准输出?

【问题讨论】:

标签: .net .net-4.0 process .net-2.0 pinvoke


【解决方案1】:

您可以将您的进程AttachConsole 到另一个进程的控制台,然后使用通常的控制台 I/O 功能对其进行读写。

记得先使用FreeConsole从进程的当前控制台分离。

【讨论】:

  • @CesarGon - 我试了一下,但 AttachConsole 返回 false(从 0 编组)
  • @SFun28:尝试GetLastError 找出失败的原因。
  • @CesarGon - 它返回 5。根据 pinvoke 网站,我使用 Marshal.GetLastWin32Error 来获取该数字。
  • @SFun28 这是一个“拒绝访问”错误。如果您使用GetLastError,您可以看到错误代码here。有关错误的更多信息,请参阅this link
  • @Centro - 感谢您的链接。我遵循了代码示例,但对我不起作用。我想我会寻找另一种方法。
【解决方案2】:

据我所知,您无法在 .NET 中执行此操作,您可以为您仅通过 ProcessStartInfo Class 启动的进程重定向输出。

据我所知,在进程启动后,您根本无法在外部重定向 I/O,只有进程本身可以做到。

您可以通过AttachConsole Function将调用进程附加到指定进程的控制台。

【讨论】:

  • 我试过 AttachedConsole,但似乎没有用。请参阅@CesarGon 答案下的主题。
【解决方案3】:

编辑:看起来它确实不起作用,正如该线程中的另一个答案所指出的那样。

我没有亲自尝试过,但似乎,因为答案被接受,this 有效。

【讨论】:

  • 该帖子中的另一个答案指出该解决方案不起作用
  • @SFun28 - 感谢您指出这一点。我应该先阅读整个线程(我认为接受的答案看起来很简单;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多