Ejecutar llamada a servicio.
Ejecutar llamada a servicio.
Hola fivewinners
Situacion, tengo un exe de un tercero que se comunica con un servicio o app que se ejecuta en background.
Tengo un do.bat que hace el trabajo.
reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
Si lo llamo desde la linea de comandos o haciendo click en el desde el explorador, funciona sin problemas. Se comunica con el servicio , le entrega parametros, el servicio responde en el archivo.txt que leo y verifico si funciono todo e imprime una etiqueta pequeña.
Pero si lo llamo desde el interior de mi aplicacion con
WaitRun("do.bat",0)
Winexec("do.bat",0)
ShellExcute("open", "do.bat"....)
Me genera todo menos la impresion del vale. He probado TODAS las combinaciones de nMode y nada de nada.
Alguna idea o tip por donde ir...
hasta probe
oShell := CreateObject( "WScript.Shell" )
oShell:Run( "%comspec% /c start do.bat", 0, .T.)
.....sin resultados.
Desde Chile
Saludos
Situacion, tengo un exe de un tercero que se comunica con un servicio o app que se ejecuta en background.
Tengo un do.bat que hace el trabajo.
reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
Si lo llamo desde la linea de comandos o haciendo click en el desde el explorador, funciona sin problemas. Se comunica con el servicio , le entrega parametros, el servicio responde en el archivo.txt que leo y verifico si funciono todo e imprime una etiqueta pequeña.
Pero si lo llamo desde el interior de mi aplicacion con
WaitRun("do.bat",0)
Winexec("do.bat",0)
ShellExcute("open", "do.bat"....)
Me genera todo menos la impresion del vale. He probado TODAS las combinaciones de nMode y nada de nada.
Alguna idea o tip por donde ir...
hasta probe
oShell := CreateObject( "WScript.Shell" )
oShell:Run( "%comspec% /c start do.bat", 0, .T.)
.....sin resultados.
Desde Chile
Saludos
Ji,ji,ji... buena la cosa... "all you need is code"
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
Re: Ejecutar llamada a servicio.
Intente asi:
Regards, saludos.
Code: Select all
#Include "FiveWin.ch"
FUNCTION WhatOs()
STATIC cVersao := ""
IF Empty( cVersao )
MYRUN ( "VER > teste.txt" )
cVersao := MemoRead( "teste.txt" )
? cVersao
fErase( "teste.txt" )
ENDIF
RETURN cVersao
Function MYRUN( cComando )
Local oShell, RET, lOk:=.T.
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
lOk:=.F.
END
END
IF lOk
TRY
//.F. = Nao espera a aplicacao fechar, .T. espera.
oShell:Run( "%comspec% /c " + cComando, 0, .T. )
CATCH
lOk:=.F.
END
oShell := NIL
ENDIF
//-- RET := oShell:Run( "%comspec% /c " + cComando, 0) //, .T. )
RETURN lOk
João Santos - São Paulo - Brasil
Re: Ejecutar llamada a servicio.
Gracias Karinha
Pero no me sirvio, hay algo raro en este proceso, si llamo al bat directamente, si funciona todo, impresion incluida, si llamo el bat desde otro PC en red tambien.
Solo es cuando llamo al bat desde adentro de mi sistema, que no funciona en el mismo equipo que tiene el servicio instalado y corriendo. Hace todo, pero no imprime.
Desde otro PC, llamando al mismo .bat,apuntando al servicio en este PC, si hace todo.
Alguna otra idea, algo asi como ejecutarlo con derechos de administrador o darle un tiempo fijo... la verdad ya me complica este error rarisimo
El proveedor del servicio solo dice, si funciona llamando al .bat desde consola, todo esta bien... asi es
Saludos
Pero no me sirvio, hay algo raro en este proceso, si llamo al bat directamente, si funciona todo, impresion incluida, si llamo el bat desde otro PC en red tambien.
Solo es cuando llamo al bat desde adentro de mi sistema, que no funciona en el mismo equipo que tiene el servicio instalado y corriendo. Hace todo, pero no imprime.
Desde otro PC, llamando al mismo .bat,apuntando al servicio en este PC, si hace todo.
Alguna otra idea, algo asi como ejecutarlo con derechos de administrador o darle un tiempo fijo... la verdad ya me complica este error rarisimo
El proveedor del servicio solo dice, si funciona llamando al .bat desde consola, todo esta bien... asi es
Saludos
Ji,ji,ji... buena la cosa... "all you need is code"
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
Re: Ejecutar llamada a servicio.
Este programa REPLY.exe tien algo a ver con esto?
https://www.dostips.com/forum/viewtopic.php?t=5330
Intenta con: reply.exe "archivo.txt" "/nolog"
Saludos.
https://www.dostips.com/forum/viewtopic.php?t=5330
Intenta con: reply.exe "archivo.txt" "/nolog"
Saludos.
João Santos - São Paulo - Brasil
Re: Ejecutar llamada a servicio.
No, es de una app de verificacion de acceso a una maquina.
Es independiente.
Tiene un servicio, mas una app.
La app la llamo desde mi sistema con parametros designados, esta se comunica son el servicio y ejecuta algunas acciones, me devuelve un numero de chequeo e imprime un ticket.
Si encapsulo toda la llamada a la app en un bat, funciona perfecto desde la linea de comandos, o haciendo click en ella, pero si la llamo con waitrun() desde adentro de mi sistema, hace todo menos imprimir.
Eso, gracias
Es independiente.
Tiene un servicio, mas una app.
La app la llamo desde mi sistema con parametros designados, esta se comunica son el servicio y ejecuta algunas acciones, me devuelve un numero de chequeo e imprime un ticket.
Si encapsulo toda la llamada a la app en un bat, funciona perfecto desde la linea de comandos, o haciendo click en ella, pero si la llamo con waitrun() desde adentro de mi sistema, hace todo menos imprimir.
Eso, gracias
Ji,ji,ji... buena la cosa... "all you need is code"
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
Re: Ejecutar llamada a servicio.
Intenta con: reply.exe "archivo.txt" "/nolog"
João Santos - São Paulo - Brasil
Re: Ejecutar llamada a servicio.
Intenta asi:
Regards, saludos.
Code: Select all
FUNCTION RUN_BAT_DOS()
LOCAL cRunBat := ".\DO.BAT"
// reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt // DO.BAT
ShellExecute(GetActiveWindow(),"open",'"'+cRunBat+'"')
RETURN NIL
João Santos - São Paulo - Brasil
-
- Posts: 179
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Ejecutar llamada a servicio.
Code: Select all
ShellExecute( , "open", "LECTORBASCULA.BAT " ,;
["] + ALLTRIM(m->cCiaAct) + [" ] + ;
["] + ALLTRIM(m->cNroUsr) + [" ] + ;
["] + ALLTRIM(cTipBas) + [" ] + ;
["] + ALLTRIM(cUniMed) + [" ] + ;
["] + ALLTRIM(cNroPto) + [" ] + ;
["] + ALLTRIM(cVelPto) + ["] ,, 6 )
- armando.lagunas
- Posts: 340
- Joined: Mon Oct 05, 2009 3:35 pm
- Location: Curico-Chile
- Contact:
Re: Ejecutar llamada a servicio.
Hola Adolfo, solo como un tips, en mi caso genero un archivo txt y lo imprimo en una impresora de vales.
y si pruebas asi : oRemoteShell:Run( 'cmd /C reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt', 0, .F. )
espero que te sirva
Saludos
Code: Select all
oApp:cStampa := 'cmd /C COPY .\Works\Template.txt "\\ARMANDO_PC\STAMPA TX-400" '
IF MsgYesNo("Está seguro que desea imprimir las etiquetas del pallet N° "+AllTrim(cPallet),"Atención")
oRemoteShell := CreateObject("WScript.Shell")
IF FILE( ".\Works\Template.txt" )
DELETE FILE ".\Works\Template.txt"
ENDIF
nHandle := FCreate( ".\Works\Template.txt" )
SELECT PA97 ; DBGOTOP()
DO WHILE !EOF()
IF PA97->IMPR = .T.
FWrite( nHandle, "CB"+CRLF )
FWrite( nHandle, "SM0,0"+CRLF )
FWrite( nHandle, "SS2"+CRLF )
...
...
FWrite( nHandle, "T390,360,1,0,0,0,0,N,N,'"+AllTrim(PA97->DIRE)+"'"+CRLF )
FWrite( nHandle, "P1"+CRLF )
ENDIF
SKIP
ENDDO
FClose( nHandle )
oRemoteShell:Run( oApp:cStampa , 0, .F. )
oRemoteShell:= nil
ENDIF
espero que te sirva
Saludos
Re: Ejecutar llamada a servicio.
Agrego mas información de esta rareza.
Cree un exe en Pelles C con las siguientes lineas
#include <stdio.h>
#include <windows.h>
#include <shellapi.h>
int main()
{
#define WIN32_DEFAULT_LIBS
static char *cmdstr="do.bat";
ShellExecute(NULL,"open",cmdstr,NULL,NULL,SW_HIDE);
return 0;
}
Y funciona Perfecto.... tengo una impresora de Tickets Esc/Pos compatible que esta redirigida a LPT1 con "Net Use LPT1 \\127.0.0.1\Tickets /persistent:yes"
Ahi es donde el servicio imprime el ticket de salida.
En definitiva... Si llamo al do.bat desde dentro de mi aplicacion hace todo menos imprimir.
Si llamo el do.bat desde la linea de comandos, hace todo e imprime.
Si llamo al ejecutable hecho en Pelles C, hace todo e imprime
No entiendo que puede ser lo diferente, si es un bat 100% funcional y extremadamente simple.
reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
Que funciona al 100% solo, desde linea de comandos o llamado desde el interior del exe recien hecho en Pelles C... PERO NO DESDE MI APLICACIÓN
La captura del LPT1 esta funcional, si hago ECHO PRUEBA >LPT1, imprime directamente en la impresora, reviso el Net USe y esta operativo..
Los Gremlins y la Ley de Murphy me tienen loco.
Cualquier ayuda o tip sera mas que bienvenido
Saludos desde Chile
Adolfo
Cree un exe en Pelles C con las siguientes lineas
#include <stdio.h>
#include <windows.h>
#include <shellapi.h>
int main()
{
#define WIN32_DEFAULT_LIBS
static char *cmdstr="do.bat";
ShellExecute(NULL,"open",cmdstr,NULL,NULL,SW_HIDE);
return 0;
}
Y funciona Perfecto.... tengo una impresora de Tickets Esc/Pos compatible que esta redirigida a LPT1 con "Net Use LPT1 \\127.0.0.1\Tickets /persistent:yes"
Ahi es donde el servicio imprime el ticket de salida.
En definitiva... Si llamo al do.bat desde dentro de mi aplicacion hace todo menos imprimir.
Si llamo el do.bat desde la linea de comandos, hace todo e imprime.
Si llamo al ejecutable hecho en Pelles C, hace todo e imprime
No entiendo que puede ser lo diferente, si es un bat 100% funcional y extremadamente simple.
reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
Que funciona al 100% solo, desde linea de comandos o llamado desde el interior del exe recien hecho en Pelles C... PERO NO DESDE MI APLICACIÓN
La captura del LPT1 esta funcional, si hago ECHO PRUEBA >LPT1, imprime directamente en la impresora, reviso el Net USe y esta operativo..
Los Gremlins y la Ley de Murphy me tienen loco.
Cualquier ayuda o tip sera mas que bienvenido
Saludos desde Chile
Adolfo
Ji,ji,ji... buena la cosa... "all you need is code"
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
- Willi Quintana
- Posts: 859
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Ejecutar llamada a servicio.
Hola Adolfo, me puedes enviar el contenido de do.bat ?
SAlu2
SAlu2
Re: Ejecutar llamada a servicio.
estaba puesto arriba... pero es este
reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
Ji,ji,ji... buena la cosa... "all you need is code"
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
Re: Ejecutar llamada a servicio.
Adolfo:
Proba con winexec:
WINEXEC(cPtch+"\recibe.bat",1)
No olvides la ruta completa al .bat, sino con WINEXEC(recibe.bat",1) sin la ruta no funciona.
Saludos,
Daniel Puente
Argentina
Proba con winexec:
WINEXEC(cPtch+"\recibe.bat",1)
No olvides la ruta completa al .bat, sino con WINEXEC(recibe.bat",1) sin la ruta no funciona.
Saludos,
Daniel Puente
Argentina
Re: Ejecutar llamada a servicio.
Te Respondi en el foro en Ingles... ninguna de estas llamadas
WaitRun(), WinExec() o ShelExecute() logra imprimir en LPT1, si hace todo lo demas, menos imprimir. Pero si lo llamo desde la consola y ejecuto el .bat, imprime sin problemas.
WaitRun(), WinExec() o ShelExecute() logra imprimir en LPT1, si hace todo lo demas, menos imprimir. Pero si lo llamo desde la consola y ejecuto el .bat, imprime sin problemas.
Ji,ji,ji... buena la cosa... "all you need is code"
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
http://www.xdata.cl - Desarrollo Inteligente
----------
Lenovo Legion Y520, 16GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1050
- Willi Quintana
- Posts: 859
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Ejecutar llamada a servicio.
Ho,a. en el .bat prueba si:
@echo off
start reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
exit
@echo off
start reply.exe "archivo.txt" "nolog" "url:127.0.0.1">>exito.txt
exit