Página 1 de 1

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 10:04 am
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

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 6:54 pm
por jfgimenez
José Luis,
¿te funciona con ShellExecute()?
--
Un saludo,
José F. Giménez
http://www.xailer.com

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 7:08 pm
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
>

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 7:45 pm
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

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 8:11 pm
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

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 8:12 pm
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

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 8:12 pm
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

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 8:48 pm
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
>
>
--

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 8:49 pm
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

Execute: no se como hacerlo funcionar

Publicado: Lun Oct 30, 2006 8:59 pm
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
--

Execute: no se como hacerlo funcionar

Publicado: Mar Oct 31, 2006 1:53 am
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
--

Execute: no se como hacerlo funcionar

Publicado: Mar Oct 31, 2006 8:56 am
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