Página 1 de 1

Problemas al ejecutar exe desde un servicio

NotaPublicado: 2011-04-29 11:23 @515
por ricar
Hola a todos.

Tengo un problema con un programa desarrollado en Perl (program.exe por ejemplo).

Este programa en determinado momento ejecuta, a través de "`", un comando sobre Windows y recoge el resultado en una variable.

El problema radica en que otro programa, llamémosle servicio, ejecuta el programa program.exe y me da error en la variable en cuestión porque ésta está vacía.

Deduzco que de alguna forma el programa servicio evita que program.exe lance nada por consola (cmd.exe).

¿Habéis tenido algún problema parecido? ¿Alguna idea para solucionarlo?

Muchas gracias.

Saludos,
Ricar.

Re: Problemas al ejecutar exe desde un servicio

NotaPublicado: 2011-04-29 11:52 @536
por explorer
Sí que puede ocurrir. Sí que me he encontrado algún caso en que el servicio se ha "apropiado" de las entrada y salida estándar, impidiendo que los programas que lanza a continuación pueda usarlos libremente.

En algunos casos lo pudimos resolver duplicando (con dup(2)) los canales estándares, en el servicio. En otros casos tuvimos que poner otro protocolo de comunicaciones entre los programas secundarios (usar el disco o disco RAM o SysV para intercambiar datos). O... lo mejor... resolver todo el problema en Perl (reducir todos los programas a uno solo :) )

Re: Problemas al ejecutar exe desde un servicio

NotaPublicado: 2011-04-29 16:20 @722
por ricar
Hola explorer.

La tercera vía no es posible, pero quizás pueda indicarles cómo solucionarlo. ¿Me podrías dar detalles de las dos primeras opciones?

Muchas gracias.

Un saludo,
Ricardo.

Re: Problemas al ejecutar exe desde un servicio

NotaPublicado: 2011-04-29 17:32 @772
por explorer
Pues no... hace mucho que no uso Windows, así que no sé cómo se hace ahora. Deberás consultar la documentación para Windows.

Lo que sí debería funcionar es el intercambio de información por medio del entubado:

programa1 | programa2

así, la salida estándar del programa1 se mete en la entrada estándar del programa2.

Y si esto no funciona, pues usando ficheros en disco.

Sería recomendable ver algo de código, por si podemos decirte si se puede hacer de otra manera.