我在循环中用WinExec调用dcc32.exe安装控件,
程序会在调用dcc32后马上进入下个循环,
如何控制在一个dcc32执行安装完成后在进入下一循环安装下一个控件

解决方案 »

  1.   

    createprocess
    waitforsingleobject
      

  2.   

    var
      StartInfo:STARTUPINFO;
      ProcInfo:PROCESS_INFORMATION;
    begin
      fillchar( ProcInfo,  sizeof(ProcInfo),0); // Set up memory block
    fillchar(StartInfo,  sizeof(StartInfo),0); // Set up memory block
      StartInfo.cb := sizeof(StartInfo); // Set structure size
      if CreateProcess(NIL,PChar(FileName), NIL, NIL, False, 0, NIL, PChar(ExtractFileDir(FileName)), @StartInfo, ProcInfo) then
        begin
          WaitForSingleObject(ProcInfo.hProcess,INFINITE);
          CloseHandle(ProcInfo.hThread);
          CloseHandle(ProcInfo.hProcess);
        end;
    end;
      

  3.   

    var
      StartInfo:STARTUPINFO;
      ProcInfo:PROCESS_INFORMATION;
    begin
      fillchar( ProcInfo,  sizeof(ProcInfo),0); // Set up memory block
        fillchar(StartInfo,  sizeof(StartInfo),0); // Set up memory block
      StartInfo.cb := sizeof(StartInfo); // Set structure size
      if CreateProcess(NIL,PChar(FileName), NIL, NIL, False, 0, NIL, PChar(ExtractFileDir(FileName)), @StartInfo, ProcInfo) then
        begin
          while WAIT_TIMEOUT = WaitForSingleObject(ProcInfo.hProcess,0) do begin
            Sleep(100);
            Application.ProcessMessage;
          end;
          CloseHandle(ProcInfo.hThread);
          CloseHandle(ProcInfo.hProcess);
        end;
    end;
    这样子可以么?
      

  4.   

    while WAIT_TIMEOUT = WaitForSingleObject(ProcInfo.hProcess,0) do begin
      Sleep(100);
      Application.ProcessMessage;
    end;
    为什么不直接
    while WAIT_TIMEOUT = WaitForSingleObject(ProcInfo.hProcess,100) do
      Application.ProcessMessage;
      

  5.   

    结果是差不多的,但是很多人知道去调整Sleep的时间,却不知道调整waitfor的时间(很汗吧...偶就不只汗过一次...)
      

  6.   

    结果是差不多的,但是很多人知道去调整Sleep的时间,却不知道调整waitfor的时间(很汗吧...偶就不只汗过一次...)