WinExec

09/02/2006

olá pessoal, meu problema é o seguinte ...

tenho um pacote de instalacao com os drivers ODBC para o firebird ...
gostaria de instala-lo em background, sem que o usuario veja o que esta acontecendo ...

para instalar uso o seguinte comando ...

WinExec(´ODBC\ODBCfire.exe /VERYSILENT /NORESTART´,SW_HIDE)


minha duvida é a seguinte, como fazer com que o pacote seja instalado, e somente depois que ele for instalado o programa retome o controle e continue executando ....

[]sss


Rafael Gomes

Respostas

10/02/2006

Rafael Gomes

como ninguem respondeu, pesquisei em outros lugares e acabei achando esse codigo aqui, um colega meu modificou algumas partes ...
para quem interessar ...

function ExecAndWait(const FileName, Params: ShortString; const WinState: Word): boolean; export;
  var
    StartInfo: TStartupInfo;
    ProcInfo: TProcessInformation;
    CmdLine: ShortString;
begin
  { Coloca o nome do arquivo entre aspas, devido a possibilidade de existir espaços nos nomes longos do Windows 9x }
  CmdLine := ´"´ + FileName + ´" ´ + Params;
  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do
    begin
      //cb := SizeOf(SUInfo); //erro aqui
      cb := SizeOf(StartInfo); //essa linha está correta
      dwFlags := STARTF_USESHOWWINDOW;
      wShowWindow := WinState;
    end;
    Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo);
    { Aguarda o encerramento do programa executado }
    if Result then
      begin
        WaitForSingleObject(ProcInfo.hProcess, INFINITE);
        { Libera os Handles utilizados }
        CloseHandle(ProcInfo.hProcess);
        CloseHandle(ProcInfo.hThread);
      end;
end;


abraços!!!


Responder Citar