Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: rapbyone en 24 Junio 2014, 18:53 pm



Título: almacenar ruta y convertirla en una ruta global
Publicado por: rapbyone en 24 Junio 2014, 18:53 pm
Amigos, recurro a ustedes para que me puedan ayudar a un problema que escapa de mi conocimiento, el cual es muy básico.

Lo que busco es lo siguiente, tengo un programa que trabaja muy bien, el único problema es que este programa trabaja bien solo cuando se instala en la carpeta de Archivos de programa, ya que las rutas las toma de por ejemplo:

Código:
Shell (Environ$("ProgramFiles") & "\apss\data\app.exe")

El problema se genera cuando alguien instala la aplicación en otro unidad o directorio, supongamos en una partición, el programa pierde su funcionalidad.

Para solucionar este problema, se me ocurre lo siguiente, al momento de iniciar por primera ves el programa, pida almacenar la ruta, en donde se instaló el programa, el usuario la selecciona a través de un "CommonDialog" y la ruta se almacena en un archivo .ini, supongamos la ruta "D:/apps"

y luego llamar esa ruta para ejecutar las funciones del programa, algo así como:
"
Código:
Dim Directorio As String
With CreateObject("WScript.Shell")
Directoriosave = "ruta almacenada en ini"
Shell (Dir$("Directoriosave ") & "\apss\data\app.exe")

el problema es como almacenar la ruta en un INI a través del CommonDialog

Yo tengo el siguiente código para hacer la verificación al iniciar el programa:

Código:
Private Sub Form_Load()
Dim Directorio As String
With CreateObject("WScript.Shell")
Directoriosave = .SpecialFolders("Mydocuments") & "\save\"
If Dir$(Directoriosave & "ruta.ini") <> "" Then
'la ruta esta almacenada, el programa sigue su funcionamiento normal
Else
'la ruta no esta creada, opción para que el usuario escoja la dirección **es lo que me falta hacer
End If
End With
End Sub

Pero me falta el poder almacenar la ruta en el ini, tengo el siguiente código, que hace algo similar, pero que ejecuta un .exe. si el exe no esta, abre una ventana para solicitar que el usuario lo escoja manualmente, luego almacena la ruta en un ini y después inicia el exe desde la ruta. Yo quiero hacer lo mismo, pero con un directorio, pero solo almacenar la ruta.

Código:
Private Sub Command1_Click()
Static Respuesta As String ' creamos una variable que no se pierde
If Respuesta = "" Then
If Dir(("C:/ruta.txt"), vbArchive) <> vbNullString Then
Open ("C:/ruta.txt") For Input As #1
Line Input #1, Respuesta
Close #1
Else
Respuesta = ("C:/notepad.exe")
End If
End If

If Dir(Respuesta, vbArchive) = vbNullString Then
CommonDialog1.Filter = "Archivos Ejecutables (*.exe)|*.exe"
CommonDialog1.ShowOpen
'si el usuario selecciona cancelar que salga del sub
If CommonDialog1.FileName = "" Then Exit Sub
Respuesta = CommonDialog1.FileName
Open ("C:/ruta.txt") For Output As #1
Print #1, CommonDialog1.FileName
Close #1
End If
ChDir Left$(Respuesta, Len(Respuesta) - Len(Dir$(Respuesta)))
Shell Respuesta, vbNormalFocus
End Sub

Gracias amigos, espero se entienda.


Título: Re: almacenar ruta y convertirla en una ruta global
Publicado por: MCKSys Argentina en 24 Junio 2014, 20:04 pm
Lo que busco es lo siguiente, tengo un programa que trabaja muy bien, el único problema es que este programa trabaja bien solo cuando se instala en la carpeta de Archivos de programa, ya que las rutas las toma de por ejemplo:

Código:
Shell (Environ$("ProgramFiles") & "\apss\data\app.exe")

El problema se genera cuando alguien instala la aplicación en otro unidad o directorio, supongamos en una partición, el programa pierde su funcionalidad.

App.path te devuelve el directorio donde esta ejecutandose el programa.

Pero me falta el poder almacenar la ruta en el ini, tengo el siguiente código, que hace algo similar, pero que ejecuta un .exe. si el exe no esta, abre una ventana para solicitar que el usuario lo escoja manualmente, luego almacena la ruta en un ini y después inicia el exe desde la ruta. Yo quiero hacer lo mismo, pero con un directorio, pero solo almacenar la ruta.

Verifica los valores de la propiedad Flags del CommonDialog para modificar el comportamiento del mismo y asi solicitar un folder en vez de un archivo.

Saludos!