2010-01-19 10 views
11

He estado teniendo dificultades para obtener el resultado de un "subproceso" (uno iniciado internamente por un proceso de blackbox que estoy monitoreando a través del sistema C#. Diagnostics.Process)C#: Redirigir salida estándar de un proceso que ya se está ejecutando

Tomé el consejo dado por la respuesta de mi publicación anterior: here. Y allí puedes encontrar los detalles de lo que he estado pasando.

En este punto, aunque puedo localizar el proceso ssh generado por process1.exe, estoy supervisando. No puedo redirigir la salida a mi programa C#, porque es un "proceso que ya se está ejecutando" y no se inició directamente desde C#.

Parece que todas las propiedades que establece en un objeto System.Diagnostics.Process solo surten efecto si está ejecutando explícitamente ese proceso desde su aplicación C#; si algún otro "proceso no gestionado" ha iniciado el proceso, establecer esta redirección no tiene ningún efecto, porque el proceso ya ha sido iniciado por algo que no especificó la redirección que necesito.

¿Hay alguna manera de redirigir la salida de un proceso que ya se ha iniciado (un proceso iniciado por un programa para el que no tengo el alcance para especificar previamente la redirección antes de que se inicie este proceso)?

Respuesta

1

En lugar de redirigir la salida directamente desde el proceso en ejecución, ¿puede capturar la salida cuando abandona el proceso A en el destino deseado, pasarlo a su nuevo proceso?

+0

¿Cómo es eso posible? Ya estoy redirigiendo todos los resultados de process1.exe a mi aplicación C#. En el momento en que process1 inicia internamente ssh.exe (process2), recibo 3 líneas de producción más de process1, y luego cesa toda salida, porque process2 es la única salida (sospecho), y no puedo redireccionar process2 salida, porque se inicia internamente por proceso1 (para lo cual no puedo controlar la redirección). –

2

Suponiendo que no hay una solución más directa, puede tratar de ejecutar una pieza de un código en otro proceso a través de CreateRemoteThread(), explicó here.

1

Quizás pueda mirar este code. Lo encontré al buscar una solución para hacer el mismo tipo de cosas; sin embargo, no fue realmente entre procesos.

Si eso no ayuda, es posible que pueda ver P/Invocación SetStdHandle y GetStdHandle que se supone que deben utilizarse al redirigir la salida estándar. Creo que esto es a lo que hace referencia la muestra de código para hacer que se produzca la redirección.

Nota: Acabo de ver estas cosas y no conseguí que funcionaran correctamente. (Tenía una mejor solución disponible para mí porque tenía acceso al código fuente que salía a la consola)

+0

Si bien no se ha probado completamente (o realmente funciona AFAIR): http://pastebin.com/m13ab7101 Esto es lo que he desarrollado basado en el material 'SetStdHandle'. HTH! – cmw

Cuestiones relacionadas