none
Ejecutar un metodo desde un .exe ha otro exe RRS feed

  • Pregunta

  • Tengo dos programas de consola, uno de los programa debe conectarse al otro y pasarle comandos para que ejecute los metodos, como realizo esto de forma exitosa?? tienen un ejemplillo por alli??
    miércoles, 13 de junio de 2018 0:50

Respuestas

  • Pero en ese enlace no se ejecuta nada. Solo se escribe en la ventana de salida el comando. Lo cual no sirve en absoluto para ejecutarlo; lo que propones en la pregunta de "enviar un retorno de carro" es completamente absurdo: aunque visualmente generaria en la ventana de presentacion lo mismo que se veria si hubieses tecleado el comando en una ventana de comandos, eso no significa que esa ventana de salida sepa ejecutar nada en la misma forma en que sabria ejecutarlo la ventana de comandos.

    Una opcion seria ejecutar el comando con Process.Start.

    Otra opcion mas elegante, si el metodo a llamar esta dentro del propio ejecutable, es trocear la cadena recibida, analizarla, y segun lo que traiga llamar al metodo pertinente. A esto es a lo que yo me referia cuando en la respuesta anterior te proponia usar Sockets y avisaba que en ese caso tendrias que analizar el contenido recibido y llamar a los metodos que de ello se deduzcan.

    miércoles, 13 de junio de 2018 16:26
    Moderador

Todas las respuestas

  • ¿Qué opciones o limitaciones tienes para trabajar con los EXE? ¿Son dos ejecutables de .Net? Si es así, desde el proyecto del segundo .exe puedes agregar una Referencia al proyecto del otro exe (sí, esto funciona también con los .exe, no solo con las .dll). Una vez que tienes la referencia, puedes invocar desde código todos los métodos públicos de ese Exe igual que si estuvieran dentro de una clase de tu propio proyecto, escribiendo el correcpondiente espacio de nombres al llamar a la clase.
    miércoles, 13 de junio de 2018 5:59
    Moderador
  • Limitaciones ninguna, tengo todos los privilegios para ejecutarlos, por cierto los ejecutables están en maquinas distintas. Son ejecutables de .NET de c#
    miércoles, 13 de junio de 2018 12:15
  • Limitaciones ninguna, [...] por cierto los ejecutables están en maquinas distintas

    Eso es una limitación ENORME y FUNDAMENTAL. Es lo primero que tendrías que haber mencionado.

    Siendo así las cosas, desde luego no vale la sugerencia inicial de usar una Referencia. Necesitas implementar algún mecanismo de comunicación entre los ejecutables. La forma de hacer esto depende mucho de las tecnologías que conozcas.

    Si estás familiarizado con WCF, puedes habilitar un Host WCF dentro del EXE de destino para que atienda las peticiones dirigidas a un puerto TCP, y en el EXE cliente añadir un proxy de WCF que exponga las funciones deseadas con el fin de poderlas llamar.

    También podrías crear un servicio REST y exponerlo con OWIN, si estás familiarizado con esta tecnología.

    Otra opción sería trabajar a nivel más bajo, usando un Socket, pero en ese caso tendrías que ensamblar y decodificar los paquetes de llamada y los argumentos de los mismos y llamar a las funciones tú mismo. Es bastante más trabajoso y también más delicado.

    No son las únicas opciones, por ejemplo, podrías usar el sistema de colas de Windows, o usar DCOM posiblemente en combinación con COM+, pero esto está más bien obsoleto y te va a complicar más. Si quieres llamar directamente a los métodos de la forma más transparente posible, yo me inclino por la opción de WCF. Es relativamente simple una vez que lo conoces, pero si no lo conoces hay que avisar que la curva de aprendizaje es bastante empinada. No es algo trvial que te podamos poner aquí diciendo "copia estas dos líeas y con eso ya te funciona todo".

    miércoles, 13 de junio de 2018 14:10
    Moderador
  • estoy utilizando socket, para la comunicacion entre ejecutables, pero no se ejecutan los metododos, osea el otro ejecutable recibe la cadena para ejecutar el comando, pero no se ejecuta, te mando el link del foro donde pregunto mi pana, para ver que te parece esa solucion y ver que me aconsejas: 

    https://social.msdn.microsoft.com/Forums/es-ES/bb8a9071-3c4e-420f-bf00-38b2e79587ae/salto-de-carro-desde-una-aplicacin-de-consola-ha-otra-quotsocketquot?forum=vcses

    miércoles, 13 de junio de 2018 15:05
  • Pero en ese enlace no se ejecuta nada. Solo se escribe en la ventana de salida el comando. Lo cual no sirve en absoluto para ejecutarlo; lo que propones en la pregunta de "enviar un retorno de carro" es completamente absurdo: aunque visualmente generaria en la ventana de presentacion lo mismo que se veria si hubieses tecleado el comando en una ventana de comandos, eso no significa que esa ventana de salida sepa ejecutar nada en la misma forma en que sabria ejecutarlo la ventana de comandos.

    Una opcion seria ejecutar el comando con Process.Start.

    Otra opcion mas elegante, si el metodo a llamar esta dentro del propio ejecutable, es trocear la cadena recibida, analizarla, y segun lo que traiga llamar al metodo pertinente. A esto es a lo que yo me referia cuando en la respuesta anterior te proponia usar Sockets y avisaba que en ese caso tendrias que analizar el contenido recibido y llamar a los metodos que de ello se deduzcan.

    miércoles, 13 de junio de 2018 16:26
    Moderador
  • Mi pana eso era, claro yo puedo evaluar la cadena recibida y ejecutar a mi voluntad el método, cierto gracias me ahogaba en un vaso de agua.
    miércoles, 13 de junio de 2018 20:07