Foros del Web » Programando para Internet » ASPX (.net) »

[SOLUCIONADO] ejecutar exe desde asp.net

Estas en el tema de ejecutar exe desde asp.net en el foro de ASPX (.net) en Foros del Web. Les cuento que instalé un software -llamado AS2 Connector-, cuyo propósito es el envío y recepción de documentos EDI. Este software está hecho con ASP.Net ...
  #1 (permalink)  
Antiguo 11/10/2013, 13:36
 
Fecha de Ingreso: septiembre-2013
Mensajes: 12
Antigüedad: 10 años, 7 meses
Puntos: 2
ejecutar exe desde asp.net

Les cuento que instalé un software -llamado AS2 Connector-, cuyo propósito es el envío y recepción de documentos EDI.

Este software está hecho con ASP.Net y dentro de su configuración avanzada, tiene una sección en la que uno puede configurar la ejecución de archivos *.bat y de scripts.

En dicha sección se consideran los siguientes eventos: Antes de enviar, después de enviar, error al enviar, al recibir y error al recibir, cada uno de los cuales permite indicar que archivo *.bat se ejecutará cuando se dispare el evento e -incluso-, se le pueden especificar parámetros.

Para aprovechar esta característica, creé una serie de archivos *.bat -uno por cada uno de los eventos que menciono arriba-.

En estos archivos *.bat, básicamente, coloco un echo para mostrar qué parámetros recibió el archivo *.bat, como sigue:

echo FileName=%1, FileNameWritten=%2, ShortDate=%3, LongDate=%4 >> salida.txt

El cual funciona casi perfectamente. El parámetro %2 no me regresa lo que pensé que regresaría; en su lugar, regresa el nombre de la macro que resuelve lo que debería regresar, es decir, %FileNameWritten% -conforme a la documentación de AS2 Connector.

Después de dicha línea, ejecuto el comando Google mailsend, como sigue:

mailsend -to [email protected] -from [email protected] -port 587 -auth -smtp smtp.almacenesvaca.com -sub "Enviando %1 - %2" -user [email protected] -pass xxxxxxxxxxxx -M "Enviando %1 - %2, el %3 - %4"

Lo curioso del caso es que si ejecuto esté batch manualmente, desde la línea de comandos, hace todo lo que se supone que debería hacer; es decir, no sólo genera la salida en el archivo salida.txt, sino que también envía el e-mail pero, si subo un archivo a mi servidor de AS2 Connector y lo envío, los eventos se disparan, los batchs correspondientes generan su salida hacia salida.txt, pero el e-mail no se envía.

¿Alguien ha tenido una experiencia similar, que pueda compartir con nosotros cómo la resolvió?

Gracias.
  #2 (permalink)  
Antiguo 11/10/2013, 17:01
 
Fecha de Ingreso: septiembre-2013
Mensajes: 12
Antigüedad: 10 años, 7 meses
Puntos: 2
Respuesta: ejecutar exe desde asp.net

¡Por fin después de largas horas conseguí resolver el problema!

Les comparto lo que encontré, por si alguno enfrenta esta misma necesidad en el futuro.

Como les decía en mi pregunta, tengo un software llamado AS2 Connector que sirve para el intercambio de documentos EDI entre asociados de intercambio.

AS2 connector está hecho en ASP.Net, e incluye una opción en las configuraciones avanzadas del asociado de intercambio para ejecutar archivos .bat o scripts de .NET al presentarse uno de varios eventos: antes de enviar un documento, después de haberlo enviado, al ocurrir un error mientras se enviaba, al momento de recibir un nuevo documento y en el caso de ocurrir un error al recibir un documento. Así mismo, están disponibles una serie de macros que devuelven valores con que se pueden pasar al .bat o al script como parámetros.

Básicamente, lo que haces al configurar las opciones avanzadas del asociado de intercambio, en la sección de batch scripting, es poner en el cuadro de texto para especificar el nombre del archivo .bat o del script, dicho dato y -en el cuadro de texto para los parámetros (argumentos) que le vas a pasar-, aquellos parámetros que te interese pasar al .bat o al script, incluyendo -si lo necesitas-, alguna de las macros disponibles.

Las macros que a mi me interesaban eran %FileName% que te regresa el nombre del archivo que se incluye en el encabezado al momento de enviar el archivo, %FileNameWritten%, que se supone que te debería regresar el nombre del archivo con su ruta completa, %ShortDate% que te da la fecha en que se dispara el evento, en formato corto y %LongDate%, que te da lo mismo, pero en formato largo.

Para empezar, %FileNameWritten% no funciona. Te regresa literalmente %FileNameWritten%.

Por otro lado, si utilizas %LongDate%" -dado que esta te regresará una cadena que incluye varias palabras separadas con espacios en blanco-, el valor que le manda al .bat o al script va encerrado entre comillas (por ejemplo, "Viernes 11 de Octubre de 2013").

Si en tu .bat -o en tu script-, tienes algo como:

mailsend -smtp smtp.tuservidor.com -port tupuerto -user [email protected] -pass tucontraseña -to [email protected] -from [email protected] -auth -sub "Archivo enviado %1" -M "Se ha enviado el archivo %1 el día %2"

... y en la configuración avanzada del asociado comercial especificaste en el apartado para los argumentos: %FileName% %LongDate%, en la línea anterior se sustituirán los parámetros como sigue:

mailsend -smtp smtp.tuservidor.com -port tupuerto -user [email protected] -pass tucontraseña -to [email protected] -from [email protected] -auth -sub "Archivo enviado archivo.edi" -M "Se ha enviado el archivo archivo.edi el día "Viernes 11 de Octubre de 2013""

Nota que la fecha incluye las comillas, además de las comillas que le he puesto al cuerpo del mensaje. Es fácil entender porqué fallaba: en el parámetro -M de mailsend (el cuerpo del mensaje), se formaba una cadena que decía "Se ha enviado el archivo archivo.edi el día ", enseguida venía Viernes 11 de Octubre de 2013, lo que no adquiría significado alguno para mail y era exactamente lo que estaba provocando el fallo.

Hice pruebas ejecutando mi archivo .bat manualmente desde la línea de comandos, pero nunca se me ocurrió poner una fecha en formato largo, por eso nunca vi este problema, hasta que me puse a jugar con las macros, investigando una por una y me topé de frente con el error.

Para corregirlo, me limité a utilizar únicamente las macros %FileName% y %ShortDate% -que me regresan algo que se puede entender como una sola palabra, sin espacios intermedios-, dado que la información que me proporcionan es suficiente para lo que necesito. Además, esto era algo que debía dejar funcionando y sinceramente no quise invertirle más tiempo.

Por si alguna vez tienen la necesidad, les dejo la respuesta que finalmente encontré.

Saludos.

Etiquetas: .net, as2, asp, email
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:07.