Hola, ya he solucionado el problema.
Ghost32 desde la línea de comandos no sabe interpretar un nombre como D:\Copias imagen\Copia1.GHO, porque en el nombre de la ruta existe un espacio. Ghost32 trabaja con nombres de carpetas cortas, es decir, con el formato de MSDOS. Dicho nombre se componen de 8 caracteres, y en la ruta que nos ocupa sería:
D;\Copias~1\Copia1.GHO
Donde vemos que lo que hay que hacer para componer el nombre de la carpeta es tomar los seis primeros caracteres del nombre, añadirle el símbolo de la ñ (ALT 126) y luego un uno. Si hubiera varias carpetas con el mismo nombre inicial, deberían ser:
D:\Copias~1\, D:\Copias~2\, etc...
En mi programa, he encontrado una función en Visual Basic que proporciona el nombre corto de la carpeta. Dicha función es:
-------------------------------------------------------------------------
Public Function RutaCorta(strRutaLarga As String) As String
Dim fso As New FileSystemObject
Dim fArchivo As File
Set fArchivo = fso.GetFile(strRutaLarga)
RutaCorta = fArchivo.ShortPath
End Function
--------------------------------------------------------------------------
Y en mi programa he realizado la modificación:
--------------------------------------------------------------------------
Dim temporal As String
Dim RutaCorta as string
'En lstFoundFiles está la lista de archivos *.GHO encontrados con ruta completa
For n = 0 To narchivos - 1
temporal = RutaCorta(lstFoundFiles.List(n))
Comando = "ghost32.exe -batch -chkimg," & temporal ' Arranca el ghost configurado para chequear imágenes"
errorimagen = ejecutar_Dos(Comando)
if errorimagen <> "" then txtresultado.text=errorimagen
next n
---------------------------------------------------------------------------
La función para recoger la información que Ghost devuelva cuando realice el chequeo de imagen y así poder tratarla en VB
Function ejecutar_Dos(Comando As String) As String
Dim oShell As WshShell
Dim oExec As WshExec
Dim ret As String
Set oShell = New WshShell
DoEvents
' ejecutar el comando
Set oExec = oShell.Exec("%comspec% /c " & Comando)
ret = oExec.StdOut.ReadAll()
' retornar la salida y devolverla a la función
ejecutar_Dos = ret ' Replace(ret, Chr(10), vbNewLine)
DoEvents
Me.SetFocus
End Function
---------------------------------------------------------------------------
Saludos y espero que esta información pueda ayudar a alguien .