In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Execute: no se como hacerlo funcionar

Foro de Xailer profesional en español
Responder
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Execute: no se como hacerlo funcionar

Mensaje por jose.luis »

Hola
Quiero ejecutar un programa situado en una ubicación compartida de red.
Para ello hago lo siguiente:
LOCAL cPath, n
LOCAL cPath, n
cPath := "PROGRAMACION_01bda demosKaisPDApreventapda.exe"
Logdebug(FileFullName(cPath)) //---> preventapda.exe
logdebug(FilePath(cPath)+"") // programacion_01bda_demoskaispda
n := Execute(FileFullName(cPath),FilePath(cPath)+"", .T.)
logdebug(n) // 0
cPath contiene la ruta y nombre correcto del programa a ejecutar.
N siempre devuelve 0 (creo que 0 significa salida con éxito).
Pero NO se ejecuta el programa.
Si desde la linea de comandos del MSDOS pongo el contenido de cPath, el
programa se ejecuta normalmente.
Saludos y gracias por vuestra ayuda.
José Luis Capel
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Execute: no se como hacerlo funcionar

Mensaje por jfgimenez »

José Luis,
¿te funciona con ShellExecute()?
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Execute: no se como hacerlo funcionar

Mensaje por jose.luis »

José,
El ShellExecute lo estoy usando en otro punto de la aplicación y
aparentemente va bien. El motivo de usar el Execute es por que necesito que
mi aplicación se espere hasta que cierren la aplicación que llamo. Si hay
alguna manera de hacerlo con ShellExecute dímelo...
Saludos y gracias,
José Luis Capel
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:[email=45463c41@news.xailer.com...]45463c41@news.xailer.com...[/email]
> José Luis,
>
> ¿te funciona con ShellExecute()?
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Execute: no se como hacerlo funcionar

Mensaje por jfgimenez »

José Luis,
> El ShellExecute lo estoy usando en otro punto de la aplicación y
> aparentemente va bien. El motivo de usar el Execute es por que necesito
> que mi aplicación se espere hasta que cierren la aplicación que llamo. Si
> hay alguna manera de hacerlo con ShellExecute dímelo...
No, no es cuestión de buscar otra forma de hacerlo, simplemente quería saber
si el problema es un bug de la función o es algún valor incorrecto que le
estés pasando. Revisando de nuevo tu primer mensaje veo que estás llamando
así a la función:
n := Execute(FileFullName(cPath),FilePath(cPath)+"", .T.)
lo que significa que el nombre del ejecutable (el primer parámetro) no lleva
el path incluido. Prueba a pasarle directamente cPath, y no FileFullName(
cPath ).
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Execute: no se como hacerlo funcionar

Mensaje por jose.luis »

José,
Estoy poniendo los parámetros como dice la ayuda. No obstante, poniendo
primero el nombre y después el path parece que hace el amago de ejecutar el
programa (aparece una ventana de consola msdos unos segundos). Voy a ver si
es cuestión de poner al final "" o no.
Saludos y gracias,
José Luis Capel
Execute
Ejecuta un proceso externo.
Categoría:
DLLs y ejecución
Parametros:
<cFile>
Fichero a ejecutar
[<cDir>]
Directorio de comienzo. Si se deja en blanco, toma la ruta de la
aplicación que va a ejecutar. Si la aplicación no contiene una ruta en el
nombre entonces se toma Application:CurDir
<lWait>
Si verdadero la aplicación esperará hasta que termine el proceso
Valor Retorno:
<hProcess | nExitCode>
Handle al proceso cuando lWait es falso, y código de salida del
proceso en caso contrario
Módulo:
Util.c
Ver también:
ShellExecute, ShellExecuteEx, WinExec
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:45464839$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
>> El ShellExecute lo estoy usando en otro punto de la aplicación y
>> aparentemente va bien. El motivo de usar el Execute es por que necesito
>> que mi aplicación se espere hasta que cierren la aplicación que llamo.
>> Si
>> hay alguna manera de hacerlo con ShellExecute dímelo...
>
> No, no es cuestión de buscar otra forma de hacerlo, simplemente quería
> saber
> si el problema es un bug de la función o es algún valor incorrecto que le
> estés pasando. Revisando de nuevo tu primer mensaje veo que estás llamando
> así a la función:
>
> n := Execute(FileFullName(cPath),FilePath(cPath)+"", .T.)
>
> lo que significa que el nombre del ejecutable (el primer parámetro) no
> lleva
> el path incluido. Prueba a pasarle directamente cPath, y no FileFullName(
> cPath ).
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>


Attached files
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Execute: no se como hacerlo funcionar

Mensaje por jose.luis »

José,
Estoy poniendo los parámetros como dice la ayuda. No obstante, poniendo
primero el nombre y después el path parece que hace el amago de ejecutar el
programa (aparece una ventana de consola msdos unos segundos). Voy a ver si
es cuestión de poner al final "" o no.
Saludos y gracias,
José Luis Capel
Execute
Ejecuta un proceso externo.
Categoría:
DLLs y ejecución
Parametros:
<cFile>
Fichero a ejecutar
[<cDir>]
Directorio de comienzo. Si se deja en blanco, toma la ruta de la
aplicación que va a ejecutar. Si la aplicación no contiene una ruta en el
nombre entonces se toma Application:CurDir
<lWait>
Si verdadero la aplicación esperará hasta que termine el proceso
Valor Retorno:
<hProcess | nExitCode>
Handle al proceso cuando lWait es falso, y código de salida del
proceso en caso contrario
Módulo:
Util.c
Ver también:
ShellExecute, ShellExecuteEx, WinExec
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:45464839$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
>> El ShellExecute lo estoy usando en otro punto de la aplicación y
>> aparentemente va bien. El motivo de usar el Execute es por que necesito
>> que mi aplicación se espere hasta que cierren la aplicación que llamo.
>> Si
>> hay alguna manera de hacerlo con ShellExecute dímelo...
>
> No, no es cuestión de buscar otra forma de hacerlo, simplemente quería
> saber
> si el problema es un bug de la función o es algún valor incorrecto que le
> estés pasando. Revisando de nuevo tu primer mensaje veo que estás llamando
> así a la función:
>
> n := Execute(FileFullName(cPath),FilePath(cPath)+"", .T.)
>
> lo que significa que el nombre del ejecutable (el primer parámetro) no
> lleva
> el path incluido. Prueba a pasarle directamente cPath, y no FileFullName(
> cPath ).
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>


Attached files
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Execute: no se como hacerlo funcionar

Mensaje por jose.luis »

José,
Estoy poniendo los parámetros como dice la ayuda. No obstante, poniendo
primero el nombre y después el path parece que hace el amago de ejecutar el
programa (aparece una ventana de consola msdos unos segundos). Voy a ver si
es cuestión de poner al final "" o no.
Saludos y gracias,
José Luis Capel
Execute
Ejecuta un proceso externo.
Categoría:
DLLs y ejecución
Parametros:
<cFile>
Fichero a ejecutar
[<cDir>]
Directorio de comienzo. Si se deja en blanco, toma la ruta de la
aplicación que va a ejecutar. Si la aplicación no contiene una ruta en el
nombre entonces se toma Application:CurDir
<lWait>
Si verdadero la aplicación esperará hasta que termine el proceso
Valor Retorno:
<hProcess | nExitCode>
Handle al proceso cuando lWait es falso, y código de salida del
proceso en caso contrario
Módulo:
Util.c
Ver también:
ShellExecute, ShellExecuteEx, WinExec
"Jose F. Gimenez" <jfgimenez@wanadoo.es> escribió en el mensaje
news:45464839$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> José Luis,
>
>> El ShellExecute lo estoy usando en otro punto de la aplicación y
>> aparentemente va bien. El motivo de usar el Execute es por que necesito
>> que mi aplicación se espere hasta que cierren la aplicación que llamo.
>> Si
>> hay alguna manera de hacerlo con ShellExecute dímelo...
>
> No, no es cuestión de buscar otra forma de hacerlo, simplemente quería
> saber
> si el problema es un bug de la función o es algún valor incorrecto que le
> estés pasando. Revisando de nuevo tu primer mensaje veo que estás llamando
> así a la función:
>
> n := Execute(FileFullName(cPath),FilePath(cPath)+"", .T.)
>
> lo que significa que el nombre del ejecutable (el primer parámetro) no
> lleva
> el path incluido. Prueba a pasarle directamente cPath, y no FileFullName(
> cPath ).
>
> --
> Un saludo,
>
> José F. Giménez
> http://www.xailer.com
>
>


Attached files
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Execute: no se como hacerlo funcionar

Mensaje por Xevi »

José Luis,
Ya me encontré con ese problema hace tiempo, y lo que hice es lo siguiente, guardar y cambiar de directorio de trabajo...
Este proceso me funciona perfectamente en mi aplicación.
Procedure xWinExecGES( cMenu, nShow )
local cOldDir := CurDrive() + ":" + CurDir()
DirChange( AppData:cRuta )
WinExec( "Ges.exe " + AppData:cCodiEmpresa + cMenu, If( nShow = Nil, SW_NORMAL, nShow ), .F. )
DirChange( cOldDir )
Return
Lo he probado con Execute() y ShellExecute... y funciona si antes salvo, cambio y vuelvo al directorio.
ahora bien... eso de terminar hasta que termine la aplicación MS-DOS, puedes encontrarte en que tu aplicación Xailer te diga [No responde]
Un Saludo,
Xevi.
"José Luis Capel" <jose.luis@iaicom.com> ha escrit al missatge del grup de discussió: [email=4545bfe8@news.xailer.com...]4545bfe8@news.xailer.com...[/email]
> Hola
>
> Quiero ejecutar un programa situado en una ubicación compartida de red.
> Para ello hago lo siguiente:
>
> LOCAL cPath, n
>
> LOCAL cPath, n
>
> cPath := "PROGRAMACION_01bda demosKaisPDApreventapda.exe"
> Logdebug(FileFullName(cPath)) //---> preventapda.exe
> logdebug(FilePath(cPath)+"") // programacion_01bda_demoskaispda
> n := Execute(FileFullName(cPath),FilePath(cPath)+"", .T.)
>
> logdebug(n) // 0
>
>
> cPath contiene la ruta y nombre correcto del programa a ejecutar.
>
> N siempre devuelve 0 (creo que 0 significa salida con éxito).
>
> Pero NO se ejecuta el programa.
>
> Si desde la linea de comandos del MSDOS pongo el contenido de cPath, el
> programa se ejecuta normalmente.
>
> Saludos y gracias por vuestra ayuda.
> José Luis Capel
>
>
--
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Execute: no se como hacerlo funcionar

Mensaje por jfgimenez »

José Luis,
> Estoy poniendo los parámetros como dice la ayuda. No obstante, poniendo
> primero el nombre y después el path parece que hace el amago de ejecutar
> el
> programa (aparece una ventana de consola msdos unos segundos). Voy a ver
> si
> es cuestión de poner al final "" o no.
La ayuda indica que el primer parámetro es el fichero a ejecutar, pero no
dice que haya que ponerlo sin path ;-) Si el fichero a ejecutar no está en
el directorio actual, hay que indicarle todo el path. Y el segundo parámetro
indica efectívamente el directorio que estará activo al ejecutarlo; es
exactamente igual que el apartado "Iniciar en" o "Directorio de trabajo" de
los accesos directos.
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Execute: no se como hacerlo funcionar

Mensaje por jfgimenez »

Xevi,
Ya me encontré con ese problema hace tiempo, y lo que hice es lo siguiente, guardar y cambiar de directorio de trabajo...
Este proceso me funciona perfectamente en mi aplicación.
Procedure xWinExecGES( cMenu, nShow )
local cOldDir := CurDrive() + ":" + CurDir()
DirChange( AppData:cRuta )
WinExec( "Ges.exe " + AppData:cCodiEmpresa + cMenu, If( nShow = Nil, SW_NORMAL, nShow ), .F. )
DirChange( cOldDir )
Return
Lo he probado con Execute() y ShellExecute... y funciona si antes salvo, cambio y vuelvo al directorio.
Acabo de hacer una prueba, y funciona perfectamente sin tener que cambiar el directorio previamente. En tu caso tendrí­as que ejecutarlo así­:
Execute( AppData:cRuta + "Ges.exe" .... , AppData:cRuta )
Tened en cuenta que se puede ejecutar cualquier programa estando situados en otro directorio. P.ej., desde el sí­mbolo del sistema:
C:Document and SettingsJose> c:windowssystem32notepad.exe
Con esto se ejecutará notepad.exe que está en c:windowssystem32, pero el directorio actual seguirá siendo c:Document and SettingsJose
ahora bien... eso de terminar hasta que termine la aplicación MS-DOS, puedes encontrarte en que tu aplicación Xailer te diga [No responde]
Eso es cierto, y por eso la función Execute() devuelve el handle del proceso que se ha creado, y se puede controlar a voluntad con las funciones IsRunning() y KillProcess()
--
Un saludo,
José F. Giménez
http://www.xailer.com
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Execute: no se como hacerlo funcionar

Mensaje por Xevi »

Jose,
Gracias por tu respuesta.
Claro, ahora me doy cuenta de porqué en mi caso cambio de directorio... mi aplicación MS-DOS intenta acceder a ficheros que están en SU directorio, por eso necesito ir al directorio para ejecutar la aplicacióN y regresar al directorio para continuar con la aplicación Xailer.
Un Saludo,
Xevi.
"Jose F. Gimenez" <jfgimenez@wanadoo.es> ha escrit al missatge del grup de discussió: 4546599b$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
Xevi,
Ya me encontré con ese problema hace tiempo, y lo que hice es lo siguiente, guardar y cambiar de directorio de trabajo...
Este proceso me funciona perfectamente en mi aplicación.
Procedure xWinExecGES( cMenu, nShow )
local cOldDir := CurDrive() + ":" + CurDir()
DirChange( AppData:cRuta )
WinExec( "Ges.exe " + AppData:cCodiEmpresa + cMenu, If( nShow = Nil, SW_NORMAL, nShow ), .F. )
DirChange( cOldDir )
Return
Lo he probado con Execute() y ShellExecute... y funciona si antes salvo, cambio y vuelvo al directorio.
Acabo de hacer una prueba, y funciona perfectamente sin tener que cambiar el directorio previamente. En tu caso tendrí­as que ejecutarlo así­:
Execute( AppData:cRuta + "Ges.exe" .... , AppData:cRuta )
Tened en cuenta que se puede ejecutar cualquier programa estando situados en otro directorio. P.ej., desde el sí­mbolo del sistema:
C:Document and SettingsJose> c:windowssystem32notepad.exe
Con esto se ejecutará notepad.exe que está en c:windowssystem32, pero el directorio actual seguirá siendo c:Document and SettingsJose
ahora bien... eso de terminar hasta que termine la aplicación MS-DOS, puedes encontrarte en que tu aplicación Xailer te diga [No responde]
Eso es cierto, y por eso la función Execute() devuelve el handle del proceso que se ha creado, y se puede controlar a voluntad con las funciones IsRunning() y KillProcess()
--
Un saludo,
José F. Giménez
http://www.xailer.com
--
jose.luis
Mensajes: 1633
Registrado: Vie Oct 14, 2005 10:56 pm

Execute: no se como hacerlo funcionar

Mensaje por jose.luis »

José,
>
> La ayuda indica que el primer parámetro es el fichero a ejecutar, pero no
> dice que haya que ponerlo sin path ;-) Si el fichero a ejecutar no está
> en el directorio actual, hay que indicarle todo el path. Y el segundo
> parámetro indica efectívamente el directorio que estará activo al
> ejecutarlo; es exactamente igual que el apartado "Iniciar en" o
> "Directorio de trabajo" de los accesos directos.
>
Disculpadme... se ve que interpreté incorrectamente el texto de la ayuda.
Haciendo la llamada tal como me has indicado toooodo va bien.
Saludos y gracias por vuestra ayuda.
José Luis Capel
Responder