procedure ExecutarPrograma (Arquivo, Parametro, Caption: String);
var
  Erro: String;
begin
  case ShellExecute (Application.Handle, nil, PChar (Arquivo), PChar (Parametro), nil, Sw_ShowNormal) of
    ERROR_FILE_NOT_FOUND: Erro := 'O arquivo no existe';
    ERROR_PATH_NOT_FOUND: Erro := 'Diretrio no existe';
    ERROR_BAD_FORMAT: Erro := 'O arquivo  invlido';
    SE_ERR_ACCESSDENIED: Erro := 'Sem acesso ao arquivo';
    SE_ERR_ASSOCINCOMPLETE: Erro := 'O nome do arquivo ou associao est incompleta ou invlida';
    SE_ERR_DDEBUSY: Erro := 'O arquivo est sendo usado';
    SE_ERR_DDEFAIL: Erro := 'A transao DDE falhou';
    SE_ERR_DDETIMEOUT: Erro := 'Terminado por fim de tempo';
    SE_ERR_DLLNOTFOUND: Erro := 'Uma biblioteca Dll no foi encontrada';
    SE_ERR_NOASSOC: Erro := 'Nenhum programa associado a este tipo de exteno';
    SE_ERR_OOM: Erro := 'Falta de memria para completar este tipo de operao';
    SE_ERR_SHARE: Erro := 'Violao de compartilhamento';
  else
    Exit;
  end;
  Application.MessageBox (Erro, Caption, mb_Ok + mb_IconError);
end;