Prueba con esto:
ShellExecute(Application.Handle, '' {'open'}, PChar(Archivo), nil,
PChar(ExtractFilePath(Archivo)), SW_SHOW);
Código Delphi
[-]
]procedure TDMMain.AbrirArchivo(Archivo: string);
var
Resultado : word;
begin
Resultado := ShellExecute(Application.Handle, '' , PChar(Archivo), nil, PChar(ExtractFilePath(Archivo)), SW_SHOW);
case Resultado of
0: ShowMessage(_('El sistema operativo no tiene memoria o recursos suficiente.')); ERROR_BAD_FORMAT : ShowMessage(_('El archivo EXE es inválido.')); SE_ERR_ACCESSDENIED: ShowMessage(_('El sistema operativo denego el acceso al archivo especificado.')); SE_ERR_ASSOCINCOMPLETE: ShowMessage(_('El archivo asociado es incompatible o inválido.')); SE_ERR_DDEBUSY: ShowMessage(_('La transacción DDE no pudo completarse porque otra transaccion DDE estaba siendo procesada.')); SE_ERR_DDEFAIL: ShowMessage(_('La transacción DDE falló.')); SE_ERR_DDETIMEOUT: ShowMessage(_('La transacción DDE no pudo completarse porque ha expirado.')); SE_ERR_DLLNOTFOUND: ShowMessage(_('La librería dinamica especificada no se ha encontrado.')); SE_ERR_FNF: ShowMessage(_('El archivo no ha sido encontrado.')); SE_ERR_NOASSOC: ShowMessage(_('No hay ninguna aplicación asociada con la extensión del archivo dado.')); SE_ERR_OOM: ShowMessage(_('No ha habido memoria suficiente para completar la operación.')); SE_ERR_PNF: ShowMessage(_('No se ha encontrado la carpeta especificada.')); SE_ERR_SHARE: ShowMessage(_('Error de permisos.')); end;
end;