Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕获外部流程输出_C#_Java_C++_Process_Stdout - Fatal编程技术网

C# 捕获外部流程输出

C# 捕获外部流程输出,c#,java,c++,process,stdout,C#,Java,C++,Process,Stdout,不要把它当作重复来结束,因为我对类似的问题有一个微妙但重要的改变: 当我没有创建进程时,是否可以用java捕获外部进程(即stdout)的输出,而我只知道进程名 我在Windows7上运行 编辑: 如果有其他语言(C#\C++)的方法,那么我可以编写一个“CaptureOutput”程序来捕获输出,写入stdout,然后在java代码中启动“CaptureOutput”并读取其stdput 难看,但可能有用 所以我也可以用其他语言回答。您可以控制流程何时启动吗?如果是这样的话,您可以启动进程,让

不要把它当作重复来结束,因为我对类似的问题有一个微妙但重要的改变:

当我没有创建进程时,是否可以用java捕获外部进程(即stdout)的输出,而我只知道进程名

我在Windows7上运行

编辑:

如果有其他语言(C#\C++)的方法,那么我可以编写一个“CaptureOutput”程序来捕获输出,写入stdout,然后在java代码中启动“CaptureOutput”并读取其stdput

难看,但可能有用


所以我也可以用其他语言回答。

您可以控制流程何时启动吗?如果是这样的话,您可以启动进程,让它将其stdout通过管道传输到一个可以读取的文件或您编写的另一个可以将其记录到数据库、事件查看器等中的程序。

首先让我说,您的要求打破了进程隔离的所有规则。
如果您的流程没有创建要捕获其输出的流程,并且您也无权修改调用流程(command shell?service manager?您还没有说是哪个)。那么,您唯一的机会(充其量也很渺茫)就是向进程中注入一个线程,当它的所有其他线程都挂起时,更改全局stdout(和stderr?)。这只能由对目标进程具有完全访问权限的进程完成。对正在运行的进程执行这样的手术不适合心脏虚弱的人。

在Linux下,检查操作系统的IPC机制,如消息队列、管道、共享内存和套接字。这些机制考虑到了安全性。尽管如此,如果您对程序的输出特别感兴趣,变通方法可能只是让第一个进程将数据输出到磁盘上的一个文件中,然后使用单独的进程进行读取。通过这种方式,您可以使用多种语言完成任务。一个简单的例子是C++将一些数据写入文件,并使用java读取/使用数据,给定相同的文件。希望我能马上回答你,如果有的话。

你想做的事很危险。很容易意外损坏您试图进入的进程的内存。测试,测试,测试。然后再测试一些。祝你好运,我知道我不想把这件事做完


这篇文章——解释了如何开始你想要的东西(使用C++)。一旦将代码注入到正在运行的进程中,就会有其他Windows API调用来替换标准输出(例如)。

@amicingh我正在Windows 7上运行您是否有权从任何位置触发其他进程java@amicngh对不起,我不明白你的意思…不,我无法控制。正如我所说的:我没有创建进程。你能编译另一个进程吗?另一个极端的选择是提取关于进程的所有运行时信息,杀死原始进程,并用你想要的重定向启动你自己的副本。不过,这可能会让人不悦……更多的引用等待着热切/绝望的质询者。SetStdHandle和将代码注入codeproject上另一个进程的三种方法的组合可能会让你达到目的。我必须强调“可能会把你带到那里”。对不起,我不得不说这只是个坏主意。找到一个日志文件解决方案或与程序开发人员或系统管理员或其他人交谈。