Esctribo esto en las News porque me pasa algo muy curioso que
quiero que todos conozcais. En una aplicación, tengo un procedimiento
que se encaga de ejecutar un programa que se le paso como parámetro y
devuelve TRUE si se pudo ejecutar o FALSE si no se pudo ejecutar por
la razón que sea (que no exista el programa, que no sea ejecutable,
etc). El tema es que me ejecuta correctamente cualquier programa que
le paso, excepto la siguiente cadena:
"C:\Archivos de programa\Accesorios\BACKUP\Msbackup.exe"
que coincide con el software que Microsoft incluye en Windows 98 para
hacer copias de seguridad. Al intentar ejecutar el programa, me da un
error en tiempo de ejecución: Error 53: No se ha encontrado el
archivo. Lo mejor de todo es que si me voy a la ventana de depuración
(CTRL-G) y escribo ? Dir( "C:\Archivos de
programa\Accesorios\BACKUP\Msbackup.exe"), la respuesta es
'Msbackup.exe', lo que me indica que archivo si existe. Además,
siguiendo la ejecución con F8, compruebo que el error lo genera la
función Shell() no Dir().
La idea de exponer esto en las news es para que si alguien
tiene 5 minutos, lo experimente, porque yo lo he probado en varios
equipos y debo estar muy ocecado, porque no encuentro solución y en
todos me hace lo mismo, previa confirmación de que el archivo existe
antes de ejecutar el programa.
Saludos y gracias a todos de antemano.
El código del procedimiento es el siguiente:
Function EjecutarPrograma(Camino As String) As Boolean
Dim a As Double
On Error GoTo errhandler
EjecutarPrograma = False
If Dir(Camino) <> "" Then
a = Shell(Camino, vbNormalFocus)
EjecutarPrograma = True
End If
Exit Function
errhandler:
End Function
> "C:\Archivos de programa\Accesorios\BACKUP\Msbackup.exe"
Seguramente se debe a los espacios en blanco, ya que se
interpreta que el programa se llama "c:\Archivos" y el resto
son parámetros. Prueba a añadir unas comillas al comienzo y
al final o bien usa el nombre de path corto.
Saludos :-) -Pedro-
Ya lo pensé, pero si le paso "C:\Archivos de programa\Pain
Shop Pro 6\psp.exe" a la misma función si que funciona.
Saludos
> Ya lo pensé, pero si le paso "C:\Archivos de programa\Pain
>Shop Pro 6\psp.exe" a la misma función si que funciona.
Tienes razón, acabo de comprobar esto:
PathName = "C:\Archivos de programa\Accesorios\MSPaint.exe"
Shell PathName
Y funciona bien.
Mira a ver si puedes ejecutar el msbackup.exe manualmente,
no vaya a ser que le falte alguna dll o algo así.
Haz que alguien te repase el código, a veces uno se ciega y
no ve el error aunque sea evidente (igual tienes mal escrita
la ruta y puedes estar dos horas mirandola sin ver el error).
Cambia el msbackup de directorio, solo para probar, cambiale
el nombre , coloca el mspaint en el directorio del backup y
pruebalo, (esto ya es paranoia, pero...).
El MSBackup ya lo he ejecutado a parte y funciona, de todas
formas el error en tiempo de ejecución es que no encuentra el archivo,
pero bueno, el resto de opciones que planteas las probaré. De todos
modos... ¿Es rarísimo no?.
Saludos