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.