¿Como saber desde que ruta se ha ejecutado nuestro exe?

2,467 views
Skip to first unread message

Masternet

unread,
Jul 28, 2011, 11:25:38 AM7/28/11
to Comunidad de Visual Foxpro en Español
Hola de nuevo,

Estoy con el tema de las rutas y una vez más he seguido el foro pero
me he quedado encallado.

Tengo el siguiente código:

CarpetaRaiz = ReadFileIni ("Miprograma.ini","Ruta","CarpetaRaiz")
CarpetaEjecutable = AddBs(CarpetaRaiz)
CarpetaDatos = CarpetaEjecutable + "DATOS"
CarpetaMenus = CarpetaEjecutable + "FORMENU"
CarpetaImagenes = CarpetaEjecutable + "IMG"
CarpetaReports = CarpetaEjecutable + "REPORTS"
CarpetaProgramas = CarpetaEjecutable + "PRG"

SET DEFAULT TO &CarpetaRaiz
SET PATH TO &CarpetaEjecutable, &CarpetaDatos, &CarpetaMenus,
&CarpetaImagenes,;
&CarpetaReports, &CarpetaProgramas

El caso es que al ejecutar la función ReadFileIni, le tengo que
indicar la ruta del archivo .ini y lo que yo quiero es que la ruta la
coja del archivo .exe de mi aplicación.

Al realizar un Curdir() desde la ventana de comandos veo que por
defecto mi ruta es:

\users\usuario\documents\visual foxpro projects\

y claro como que mi .exe y mi .ini estan en c:\miprograma pues la
función simplemente no funciona
Entonces, ¿Cómo puedo hacer para que la ruta principal sea la ruta
donde se ejecute el .exe?

Francisco Ibarra

unread,
Jul 28, 2011, 11:52:24 AM7/28/11
to publice...@googlegroups.com
Masternet:

Yo utilizo las siguientes lineas :

Declare Integer GetModuleFileName In WIN32API integer hinst, String @lpszFilename,integer @cbFileName
cRuta = Space(256)
nBytes = 255
=GetModuleFileName(0, @cRuta, @nBytes)
nBytes = At(Chr(0),cRuta)
cRuta = Iif(nBytes>1,Substr(cRuta,1,nBytes-1),"")

Espero te ayude.




> Date: Thu, 28 Jul 2011 08:25:38 -0700
> Subject: [vfp] ¿Como saber desde que ruta se ha ejecutado nuestro exe?
> From: maste...@hotmail.com
> To: publice...@googlegroups.com

Marco Plaza

unread,
Jul 28, 2011, 12:11:06 PM7/28/11
to Comunidad de Visual Foxpro en Español

Para saber desde donde inició tu exe o dll puedes usar

JUSTPATH(application.ServerName)+'\'

Saludos.

Masternet

unread,
Jul 28, 2011, 12:45:15 PM7/28/11
to Comunidad de Visual Foxpro en Español
Fantástico
Ahora sí puedes mover tu ejecutable y archivo .ini donde quieras, tan
solo modificas la ruta del archivo.ini y listo

El código quedaría así:

Ruta=JUSTPATH(application.ServerName)+'\'
CarpetaRaiz = ReadFileIni (Ruta+"Miprograma.ini","Ruta","CarpetaRaiz")
CarpetaEjecutable = AddBs(CarpetaRaiz)
CarpetaDatos = CarpetaEjecutable + "DATOS"
CarpetaMenus = CarpetaEjecutable + "FORMENU"
CarpetaImagenes = CarpetaEjecutable + "IMG"
CarpetaReports = CarpetaEjecutable + "REPORTS"
CarpetaProgramas = CarpetaEjecutable + "PRG"

SET DEFAULT TO &CarpetaRaiz
SET PATH TO &CarpetaEjecutable, &CarpetaDatos, &CarpetaMenus,
&CarpetaImagenes,;
&CarpetaReports, &CarpetaProgramas

Baltazar Moreno

unread,
Jul 28, 2011, 1:10:32 PM7/28/11
to publice...@googlegroups.com
Intenta: 

? SYS(5)+ADDBS(SYS(2003))

Saludos!
--
Baltazar Moreno
VFP9SP2 - Win7

Adolfo Leon Quintero Hoyos

unread,
Jul 28, 2011, 1:01:52 PM7/28/11
to publice...@googlegroups.com
PRUEBAR CON EL FULLPATH(CUDIR())

SALUDOS

ADOLFO

Luis Maria Guayan

unread,
Jul 28, 2011, 1:31:31 PM7/28/11
to publice...@googlegroups.com
? FULLPATH("")

ó

? ADDBS(JUSTPATH(SYS(16,1))) 

Esta última solo dese un programa, no desde la ventana de comandos

Como consejo, utiliza variables tipo Name en lugar de macrosustitución que es mas rápido

Ej:
lcPath = FULLPATH("")
SET DEFAULT TO (lcPath)


 
Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Marco Plaza

unread,
Jul 28, 2011, 2:20:32 PM7/28/11
to Comunidad de Visual Foxpro en Español

Uff masternet usa application.servername solo si compilas un servidor
de automatización
o una mtdll - para exes regulares usa usa sys(16,1) como te dice
Luis María.

Ahora es mejor tener una función que sirve para ambos:

if application.startmode $ '1,4'
lcPath = sys(16,1)
else
lcPath = application.servername
endif

return justpath(lcPath)+'\'

( ando con puros mtdll en estos días! )

Saludos..

Marco


On Jul 28, 1:31 pm, Luis Maria Guayan <luismar...@gmail.com> wrote:
> ? FULLPATH("")
>
> ó
>
> ? ADDBS(JUSTPATH(SYS(16,1)))
>
> Esta última solo dese un programa, no desde la ventana de comandos
>
> Como consejo, utiliza variables tipo Name en lugar de macrosustitución que
> es mas rápido
>
> Ej:
> lcPath = FULLPATH("")
> SET DEFAULT TO (lcPath)
>
> *Luis María Guayán
> Tucumán, Argentina
> _________________________
> **http://www.PortalFox.com<http://www.portalfox.com/>*
> *Nada corre como un zorro
> _________________________*

Alci

unread,
Jul 28, 2011, 2:21:36 PM7/28/11
to Comunidad de Visual Foxpro en Español
Yo utilizo de esta manera en programa principal del proyecto, y con
esto ya no te preocupas desde donde se ejecuta el sistema.
El procedimiento establece correctamen el Path para todas las carpetas
del proyecto.

PROCEDURE SetPath
LOCAL lcsys16, lcprogram
lcsys16 = SYS(16)
lcprogram = SUBSTR(lcsys16,AT(":", lcsys16) - 1)
CD LEFT(lcprogram, RAT("\", lcprogram))
IF RIGHT(lcprogram, 3) = "FXP"
CD ..
ENDIF

SET PATH TO PROGS, FORMS, LIBS, MENUS, data, OTHER, REPORTS,
INCLUDE, HELP, BITMAPS
SET CLASSLIB TO MAIN, TSGEN ADDITIVE

ENDPROC


Saludos,

Alcides Portillo

juanziur

unread,
Jul 28, 2011, 2:33:49 PM7/28/11
to Comunidad de Visual Foxpro en Español
para saber la ruta utiliza la funcion home()
espero te sirva, Saludos

Intel Man

unread,
Jul 28, 2011, 3:11:56 PM7/28/11
to publice...@googlegroups.com
Hola, prueba con:

 ?fullpath("")

Saludos


> Date: Thu, 28 Jul 2011 08:25:38 -0700
> Subject: [vfp] ¿Como saber desde que ruta se ha ejecutado nuestro exe?
> From: maste...@hotmail.com
> To: publice...@googlegroups.com
>

Cesar J PaEs

unread,
Jul 28, 2011, 8:00:16 PM7/28/11
to publice...@googlegroups.com
 
 ?fullpath("archivo.exe")
asi te daria donde se encuentra tu ejecutable, o carpeta principal


 

From: intel_m...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] ¿Como saber desde que ruta se ha ejecutado nuestro exe?
Date: Thu, 28 Jul 2011 19:11:56 +0000

Masternet

unread,
Jul 29, 2011, 4:58:43 AM7/29/11
to Comunidad de Visual Foxpro en Español
Hola,

Al ejecutar el fullpath desde desarrollo me indica una ruta que no es
correcta:

c:\users\usuario\documents\visual fopro projects\mirpograma.exe

La ruta real es:

c:\miprograma\miprograma.exe

Entonces en modo desarrollo no me funciona el código pero al
compilarlo y crear el ejecutable si

Luis Maria Guayan

unread,
Jul 29, 2011, 8:15:06 AM7/29/11
to publice...@googlegroups.com
Debes ejecutar:

? FULLPATH("")

Luis María Guayán
Tucumán, Argentina
_________________________

http://www.PortalFox.com
Nada corre como un zorro
_________________________

Intel Man

unread,
Jul 29, 2011, 10:00:37 AM7/29/11
to publice...@googlegroups.com
Hola, lo que pasa seguro es que estas abriendo el proyecto desde esa ruta:

 
c:\users\usuario\documents\visual fopro projects\
 
Por eso el fullpath() te muestra esa ruta, el fullpath te va a mostrar en que ruta estas actualmente.
 
Saludos
 
> Date: Fri, 29 Jul 2011 01:58:43 -0700
> Subject: [vfp] Re: ¿Como saber desde que ruta se ha ejecutado nuestro exe?
> From: maste...@hotmail.com
> To: publice...@googlegroups.com
>

Masternet

unread,
Jul 29, 2011, 10:35:59 AM7/29/11
to Comunidad de Visual Foxpro en Español
El proyecto no está en esa ruta
¿Puede ser de las opciones de configuración del VF?

Viktor Velazquez

unread,
Jul 29, 2011, 10:49:06 AM7/29/11
to publice...@googlegroups.com
por ke no usas estas funciones
lcDefaultPath =
Sys(5)+Sys(2003)
messageb(lcDefaultPath)
 
 

 
> Date: Fri, 29 Jul 2011 07:35:59 -0700

> Subject: [vfp] Re: ¿Como saber desde que ruta se ha ejecutado nuestro exe?
> From: maste...@hotmail.com
> To: publice...@googlegroups.com
>

Marco Plaza

unread,
Jul 29, 2011, 10:52:47 AM7/29/11
to Comunidad de Visual Foxpro en Español
Ojo guarden esto..que les sirve, ya para cerrar este tema.La confusión
la viene porque no hay una solución única, depende de como inicies el
programa: aqui les mando una fucion que resuelve esto de forma
inequívoca ( gracias a Rick Strahl )

DO CASE
CASE INLIST(Application.StartMode,2,3,5)
lcPath = JustPath(Application.ServerName)

CASE (Application.StartMode) = 0
lcPath = SYS(5) + CURDIR()

CASE ATC(".APP",SYS(16,0)) > 0
lcPath = JustPath(SYS(16,0))

OTHERWISE
lcPath = JustPath(SYS(16,0))
IF ATC("PROCEDURE",lcPath) > 0
lcPath = SUBSTR(lcPath,RAT(":",lcPath)-1)
ENDIF
ENDCASE

RETURN AddBs(lcPath)

Saludos.
Marco Plaza

On Jul 29, 10:35 am, Masternet <masterne...@hotmail.com> wrote:
> El proyecto no está en esa ruta
> ¿PuedeHola ser de las opciones de configuración del VF?

Luis Maria Guayan

unread,
Jul 29, 2011, 12:16:08 PM7/29/11
to publice...@googlegroups.com
Mira este artículo:

-- Accesos directos a distintas versiones de VFP --

Yo lo sigo aplicando actualmente con solo VFP9 y me evita todos los problemas de saber donde se inició VFP y me olvideo del SET DEFAUT TO, etc.

 
Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________



Intel Man

unread,
Jul 29, 2011, 1:09:36 PM7/29/11
to publice...@googlegroups.com
En realidad yo tampoco uso el set defa ni el set path, yo corro la aplicacion con el acceso directo en la carpeta de la aplicacion y tambien me olvido de tanto problemas con las carpetas :)

Saludos



Date: Fri, 29 Jul 2011 13:16:08 -0300
Subject: Re: [vfp] Re: ¿Como saber desde que ruta se ha ejecutado nuestro exe?
From: luism...@gmail.com
To: publice...@googlegroups.com

SILVIO JOSE SUAREZ CORREDOR

unread,
Jul 29, 2011, 1:41:59 PM7/29/11
to publice...@googlegroups.com
 Un ejecutable se puede y se debe  ejecutar desde cualquier carpeta. AHI que mirar que carpetas crea permanentes para no entrar en conflicto 


From: viv...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Re: ¿Como saber desde que ruta se ha ejecutado nuestro exe?
Date: Fri, 29 Jul 2011 14:49:06 +0000

Marco Plaza

unread,
Jul 29, 2011, 1:45:20 PM7/29/11
to Comunidad de Visual Foxpro en Español
Masternet se fué sin decir adiós je je

On Jul 29, 1:41 pm, SILVIO JOSE SUAREZ CORREDOR
<sssilvioj...@hotmail.com> wrote:
>  Un ejecutable se puede y se debe  ejecutar desde cualquier carpeta. AHI que mirar que carpetas crea permanentes para no entrar en conflicto
>
> From: vive...@hotmail.comTo:publice...@googlegroups.com
> Subject: RE: [vfp] Re: ¿Como saber desde que ruta se ha ejecutado nuestro exe?
> Date: Fri, 29 Jul 2011 14:49:06 +0000
>
> por ke no usas estas funciones
>
> lcDefaultPath = Sys(5)+Sys(2003)
>
> messageb(lcDefaultPath)
>
>
>
>
>
>
>
> > Date: Fri, 29 Jul 2011 07:35:59 -0700
> > Subject: [vfp] Re: ¿Como saber desde que ruta se ha ejecutado nuestro exe?
> > From: masterne...@hotmail.com> To:publice...@googlegroups.com

Masternet

unread,
Jul 30, 2011, 6:18:12 AM7/30/11
to Comunidad de Visual Foxpro en Español
Sigo aquí Marco, :)

Vaya debate he creado, jeje

Gracias a todos por vuestros comentarios
Al final para que me funcionase en desarrollo, tuve que modificar la
ruta por defecto de las opciones de VFP y poner la ruta de mi proyecto

Es increíble lo que he conseguido en pocos meses gracias a esta
comunidad
He de decir que llevaba más de 15 años sin programar, y lo último que
toqué fue algo de Clipper por lo que me siento muy orgulloso

Gracias a todos.


On 29 jul, 19:45, Marco Plaza <stmapw...@gmail.com> wrote:
> Masternetse fué sin decir adiós je je
Reply all
Reply to author
Forward
0 new messages