Run Shell Oculto

253 views
Skip to first unread message

francisco prieto

unread,
Apr 19, 2016, 2:57:54 PM4/19/16
to publicesvfoxpro
Grupo,

Tengo un  programa de que hace esto

cArchBat="C:\Fuentes\scalenet\ComExt\EnviarVen.bat"
loShell = Createobject("WScript.Shell")
lnRetorno = loShell.Run(cArchBat,0, .T.)

El segundo parámetro del Run le dice que lo corra oculto y el tercer parámetro le dice que espere hasta que termine.

Cuando el programa que esta dentro del bat se ejecuta normalmente es invisible y lnRetorno me dice si se ejecuto bien, pero cuando el programa estalla, en vez de terminar el bat, me lanza por pantalla el siguiente error:

trasmision vendedores.png
Dicho error es un error del programa y hasta que no le doy aceptar o cierro la ventana con la cruz no sigue adelante.

Cuando mi programa de VFP esta en modo interactivo no me importa porque el usuario le va a dar Aceptar o va a cerrar la ventana. Pero cuando mi programa esta en modo servicio, como en el modo servicio no se muestran las interfases con el usuario el programa se cuelga esperando que le den Aceptar o cierren la ventana (pero eso no va a ocurrir porque la ventana nunca aparece)

Alguno conoce alguna forma de interceptar los errores a este nivel?

Saludos,

Pancho
Córdoba
Argentina

Roberto Tello & Asoc. - Estudio Informatico

unread,
Apr 19, 2016, 4:22:08 PM4/19/16
to publice...@googlegroups.com

loShell = CREATEOBJECT("WScript.Shell")

lcCmd = "SUBST W: D:\"

lcArchivo = GetEnv("TEMP") + "" + Sys(2015) + ".bat"

StrToFile(lcCmd, lcArchivo)

loShell.Run(lcArchivo, 0,1) 

 

Saludos.-

Roberto.-

--
Roberto H. Tello & Asoc.
Estudio Informático
Msn: robertote...@hotmail.com
Skype: robertotellomoreno

francisco prieto

unread,
Apr 19, 2016, 4:26:41 PM4/19/16
to publice...@googlegroups.com
Roberto,

Eso es lo que hago, solo que vos en el tercer parametro pones 1 en vez de T, pero es lo mismo.

Gracias igual,

Pancho
Córdoba
Argentina

Roberto Tello & Asoc. - Estudio Informatico

unread,
Apr 19, 2016, 4:31:21 PM4/19/16
to publice...@googlegroups.com

Yo uso este código tal cual esta... y no me da ningún error... con diferentes sistemas operativos...

No sabría decirte que puede ser entons

Saludos.-

francisco prieto

unread,
Apr 19, 2016, 5:15:37 PM4/19/16
to publice...@googlegroups.com
Por eso empecé diciendo que no me da ningun error si el programa que llama el bat no falla, pero ese programa que corro con el bat, falla en algunas ocasiones (y es un exe del cual no tengo el fuente así que no puedo corregirlo)

Investigue haciendo un vbs de la siguiente manera

On Error Resume Next
Dim objResult
Dim cArchBat
Dim objShell
cArchBat="C:\Fuentes\scalenet\ComExt\EnviarVen.bat" Set objShell = WScript.CreateObject("WScript.Shell")
objResult = objShell.Run(cArchBat, 0, True)
If Err.Number <> 0 Then
WScript.Echo "Error in DoStep1: " & Err.Number & Err.Description Err.Clear
End If
On Error Goto 0

Pero da el mismo error.

Incluso probe con ShellExecute

DECLARE INTEGER ShellExecute IN shell32.dll ; INTEGER hndWin, ; STRING cAction, ; STRING cFileName, ; STRING cParams, ; STRING cDir, ; INTEGER nShowWin
cArchBat="C:\Fuentes\scalenet\ComExt\EnviarVen.bat"
cAction = "open"
ShellExecute(0,cAction,cArchBat,"","",0)

Y da el mismo error

Como digo el error es que se quede esperando una respuesta del usuario. Si le estoy diciendo que corra Hide, es precisamente lo que quiero hacer es que interprete que por mas que le de error no me muestre ninguna ventana.

Sigo investigando.

Gracias,
Pancho
Córdoba
Argentina

sochandoreno

unread,
Apr 19, 2016, 5:32:19 PM4/19/16
to Comunidad de Visual Foxpro en Español
Saludos,

Se me ocurren dos cosas:
  1. Utilizar un try....catch.
  2. Colocar un evento time que al pasar cierto tiempo cierre la tarea
Espero te sirva de algo

Atte.,
Jaime Vargas
Vencom Services, C.A.

francisco prieto

unread,
Apr 19, 2016, 5:52:29 PM4/19/16
to Comunidad de Visual Foxpro en Español
Eso esta dentro de un try catch. El codigo completo es mas largo.

Igual gracias,

Saludos,

Pancho
Córdoba
Argentina

francisco prieto

unread,
Apr 19, 2016, 8:35:58 PM4/19/16
to Comunidad de Visual Foxpro en Español
La solución que encontré no me sirve a mi pero por ahí para algún otro que se encuentre con el problema le sirva.

si en vez de ejecutar


cArchBat="C:\Fuentes\scalenet\ComExt\EnviarVen.bat"
loShell = Createobject("WScript.Shell")
lnRetorno = loShell.Run(cArchBat,0, .T.)

ejecutan

lcexe='C:\FUENTES\SCALENET\ComExt\AclasSDKConsole.exe -h 192.168.1.14:5002 -t Down -n "C:\FUENTES\SCALENET\ComExt\EnviarVen.txt" -b VendorInfo >> C:\FUENTES\SCALENET\ComExt\Salida.Res'
loShell = Createobject("WScript.Shell")
lnRetorno=loShell.Run('%comspec% /c start /wait '+lcexe,0,.t.)

donde lcexe es el contenido de mi archivo cArchBat

el error no se produce pero tampoco se crea en este caso el archivo C:\FUENTES\SCALENET\ComExt\Salida.Res que es el que contiene lo mostrado en la ventana de comandos.

Justamente necesito leer ese archivo para saber el resultado de la operación y es por eso que en mi caso la solución es insuficiente, pero si no se necesitara leer ningún archivo de salida funciona perfectamente.

Saludos,

Pancho
Córdoba
Argentina

Jean Pierre Adonis De La Cruz Garcia

unread,
Apr 20, 2016, 11:18:32 AM4/20/16
to Comunidad de Visual Foxpro en Español
Como estas Francisco, al momento, entiendo que el lcexe es lo que hace tu archivo BAT, si es asi, entiendo tambien que el proceso de tu BTAT es para descargar un archivo en tiempo real, y quizas el problema suscite en el tiempo de ejecucion de dicha descarga, ya que a veces la descarga puede demorar n seg, y el proceso de VFP continua, y al no encontrar respuesta estara saliendo el error.
Confirma si es que haciendolo paso a paso linea a linea te funciona ok, por que si fuera asi, entonces tendras que poner un tiempo para que realice la operacion y ddespues continue el resto.
Si no es asi, entonces ya no sabria que decir.

francisco prieto

unread,
Apr 20, 2016, 11:52:05 AM4/20/16
to Comunidad de Visual Foxpro en Español
No, Jean Pierre. Es el uso de un driver de balanza, que usa una interfaz de comando DOS.

Lo que tuve que hacer es tomarme el trabajo de ver cuales argumentos hacían estallar la dll y por el momento deshabilitar esas comunicaciones en el sistema, ya que si, como dije corro en modo interactivo no hay inconvenientes que aparezca una pantalla que no es del sistema, pero estando en modo servicio, se cuelga el servicio.

Así que use la teoría de Jack, corte por lo sano :D

Saludos y gracias,

Pancho
Córdoba
Argentina

Jean Pierre Adonis De La Cruz Garcia

unread,
Apr 20, 2016, 11:57:13 AM4/20/16
to Comunidad de Visual Foxpro en Español
Quiero entender con eso, que pudistes solucionar tu problema Francisco, que bueno.

francisco prieto

unread,
Apr 20, 2016, 2:46:57 PM4/20/16
to Comunidad de Visual Foxpro en Español
Jean,

El problema en si no lo pude solucionar, lo que hice fue usar usa solucion alternativa, mientras el proveedor repara la dll. Me hubiera gustado resolverlo mejor, pero bueno a veces no queda otra.

Saludos y gracias,

Pancho
Córdoba
Argentina
Reply all
Reply to author
Forward
0 new messages