Tenho uma função que faz isso aqui e funciona certnho. Sugiro que teste antes 
de colocar em produção.

Segue:

--------------------------------------------------------------------------------


////////////////////////////////////////////////////////////////
// FileName  : nome do documento ou programa que será aberto.
// Parameters: parâmetros de linha de comando.
// ExitCode  : código de saída da aplicação (disponível apenas se Wait > 0).
// Wait      : maximo de tempo a aguardar, até a aplicação ser finalizada 
[milissegundos].
//             depois de atingido esse tempo, a aplicação é finalizada e
//             False é retornado como resultado.
//             0  = não aguarda a aplicação, retorna imediatamente.
// Hide      : True  = aplicação roda invisível em background.
// Result    : True  = aplicação foi iniciada corretamente
//             False = aplicação não pôde ser iniciada, ou o Timeout expirou
// Source    : http://www.martinstoeckli.ch/delphi/delphi.html#AppStart
////////////////////////////////////////////////////////////////
function Sto_ShellExecute(const FileName, Parameters: String; var ExitCode: 
DWORD;
  const Wait: DWORD = 0; const Hide: Boolean = False): Boolean;
var
  myInfo: SHELLEXECUTEINFO;
  iWaitRes: DWORD;
begin
  // prepare SHELLEXECUTEINFO structure
  ZeroMemory(@myInfo, SizeOf(SHELLEXECUTEINFO));
  myInfo.cbSize := SizeOf(SHELLEXECUTEINFO);
  myInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI;
  myInfo.lpFile := PChar(FileName);
  myInfo.lpParameters := PChar(Parameters);
  myInfo.lpDirectory  := PChar(ExtractFileDrive(FileName));
  if Hide then
    myInfo.nShow := SW_HIDE
  else
    myInfo.nShow := SW_SHOWNORMAL;
  // start file
  ExitCode := 0;
  Result := ShellExecuteEx(@myInfo);
  // if process could be started
  if Result then
  begin
    // wait on process ?
    if (Wait > 0) then
    begin
      iWaitRes := WaitForSingleObject(myInfo.hProcess, Wait);
      // timeout reached ?
      if (iWaitRes = WAIT_TIMEOUT) then
      begin
        Result := False;
        TerminateProcess(myInfo.hProcess, 0);
      end;
      // get the exitcode
      GetExitCodeProcess(myInfo.hProcess, ExitCode);
    end;
    // close handle, because SEE_MASK_NOCLOSEPROCESS was set
    CloseHandle(myInfo.hProcess);
  end;
end;


--------------------------------------------------------------------------------


Abraço.


--------------------------------------------------------------------------------
      Atenciosamente:

     
     Eduardo Cláudio Nicácio
      Analista Programador JR.
      Fábrica 02 - CTIS
      Tel.: (11) 3150-6834
      [EMAIL PROTECTED]
     



  ----- Original Message ----- 
  From: Natanael Rodrigues 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Friday, March 02, 2007 10:34 AM
  Subject: RES: [delphi-br] Executar um comando no dos e aguardar execução


  EX:

  ExecAndWait('start G:\BACKUPS\rar.exe', '', SW_SHOW);
  ExecAndWait('rar a -e G:\BACKUPS\backup.rar *.*', '', SW_SHOW);

  -----Mensagem original-----
  De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
  nome de Gabriel Filho
  Enviada em: sexta-feira, 2 de março de 2007 10:20
  Para: delphi-br@yahoogrupos.com.br
  Assunto: Re: [delphi-br] Executar um comando no dos e aguardar execução

  posta ai como vc esta usando esta funcao

  Em 02/03/07, Natanael Rodrigues <[EMAIL PROTECTED]> escreveu:
  >
  > Este eu testei.... mas não rola... por exemplo o comando start
  > "G:\BACKUPS\rar.exe" não executa, quando eu rodo pelo winexec ele já
  > executa.
  >
  > sds.
  >
  > -----Mensagem original-----
  > De: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>
  [mailto:
  > delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>]Em
  > nome de Gabriel Filho
  > Enviada em: sexta-feira, 2 de março de 2007 09:53
  > Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>
  > Assunto: Re: [delphi-br] Executar um comando no dos e aguardar execução
  >
  > Retirado do Dtdelphi 2.8
  > Inclua na seção uses: Windows
  >
  > { Esta função faz isto. }
  >
  > function ExecAndWait(const FileName, Params: string;
  > const WindowState: Word): boolean;
  > var
  > SUInfo: TStartupInfo;
  > ProcInfo: TProcessInformation;
  > CmdLine: string;
  > begin
  > { Coloca o nome do arquivo entre aspas. Isto é necessário devido aos
  > espaços contidos em nomes longos }
  > CmdLine := '"' + Filename + '"' + Params;
  > FillChar(SUInfo, SizeOf(SUInfo), #0);
  > with SUInfo do begin
  > cb := SizeOf(SUInfo);
  > dwFlags := STARTF_USESHOWWINDOW;
  > wShowWindow := WindowState;
  > end;
  > Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
  > CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
  > PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
  > { Aguarda até ser finalizado }
  > if Result then begin
  > WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  > { Libera os Handles }
  > CloseHandle(ProcInfo.hProcess);
  > CloseHandle(ProcInfo.hThread);
  > end;
  > end;
  > - Exemplo de uso:
  >
  > ExecAndWait('c:\windows\notepad.exe', '', SW_SHOW);
  > Observações
  > Não se esqueça de informar o caminho (path) do arquivo completo. Esta
  > função
  > foi desenvolvida para Delphi 32 bits (2, 3, 4,...).
  >
  > Em 02/03/07, Natanael Rodrigues <[EMAIL PROTECTED]
  <nr.news%40gmail.com>>
  > escreveu:
  > >
  > > Estou executando uma aplicação via comando winexec que é os comandos
  de
  > > Backup da minha rede, gostaria que cada vez que é gerado essa linha de
  > > comando o sistema aguarda o termino da execução. Alguem sabe como
  posso
  > > fazer isto?
  > >
  > > att.
  > >
  > > [As partes desta mensagem que não continham texto foram removidas]
  > >
  > >
  > >
  >
  > [As partes desta mensagem que não continham texto foram removidas]
  >
  > [As partes desta mensagem que não continham texto foram removidas]
  >
  >
  >

  [As partes desta mensagem que não continham texto foram removidas]

  [As partes desta mensagem que não continham texto foram removidas]



   

[As partes desta mensagem que não continham texto foram removidas]

Responder a