Si los nombres de archivo del programa y del que queres pasar como parámetro contienen espacios, tenes que encerrarlos entre comillas para que el sistema los considere un único parámetro:
por ejemplo:
WinExec('c:\archivos de programa\programa.exe c:\mis documentos\documento.doc');
tratará de ejecutar c:\archivos, pasándole como parámetros:
de
programa\programa.exe
c:\mis
documentos\documento.doc
totalmente erratico, no:
en cambio:
WinExec('"c:\archivos de programa\programa.exe" "c:\mis documentos\documento.doc'");
Tratará de ejecutar:
c:\archivos de programa\programa.exe
con el parámetro:
c:\mis documentos\documento.doc
otra opción es usar solamente nombres de archivo 8.3:
WinExec('c:\archiv~1\programa.exe c:\misdoc~1\documento.doc');
Hasta luego.