不要把它关闭为重复,因为我有一个微妙但重要的变化,从相似的问题:
如果我没有创建流程,并且我只知道进程名,那么是否有可能在java,中捕获外部进程的输出(即stdout)?
我在windows 7上跑。
编辑:
如果有其他语言(C#\C++)的方法,那么我可以编写一个"CaptureOutput“程序来捕获输出、写到stdout,并在我的java代码中启动"CaptureOutput”并读取它的stdput。
很丑,但可能有用。
所以用其他语言的回答对我来说也是可以的。
发布于 2012-08-12 00:03:01
首先,让我说,您要求的是打破了所有的规则的过程隔离。如果您的进程没有创建要捕获其输出的进程,并且您也没有权限修改调用进程(命令shell?服务经理?你还没说是哪一个)。那么,您唯一的机会,充其量也是一个很小的机会,就是在进程中注入一个线程,当它的所有其他线程被挂起时,更改全局stdout (和stderr?)。这只能由具有对目标进程的完全访问权限的进程来完成。在跑步的过程中做这样的手术并不是为了心脏的虚弱。
发布于 2012-09-27 19:54:22
你想做的事很危险。你很容易无意中破坏了你想要进入的进程的记忆。测试。那就再试一试。祝你好运-我知道我不想这么做。
这篇文章-- API挂钩 --解释了如何开始您想要的东西(使用C++)。一旦将代码注入到正在运行的进程中,就会有其他Windows调用来替换STDOUT (例如SetStdHandle)。
发布于 2012-08-02 12:38:55
您对进程何时开始有任何控制吗?如果是这样的话,您可以启动该进程,并让它将其stdout输送到一个可以读取的文件中,或者您编写的另一个程序中,该程序可以将其记录在数据库、事件查看器等中。
https://stackoverflow.com/questions/11760186
复制相似问题