Есть код
| Код | function TfmMain.ExecAndWait(const FileName, Params: ShortString; ArcDir:string ;const WinState: Word): boolean; export; var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: ShortString; begin CmdLine := '"' + Filename + '" ' + Params; FillChar(StartInfo, SizeOf(StartInfo), #0); with StartInfo do begin cb := SizeOf(StartInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WinState; end; Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ArcDir),StartInfo,ProcInfo); if Result then begin WaitForSingleObject(ProcInfo.hProcess, INFINITE); { Free the Handles } CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end; end;
|
При запуске консольного приложения ожидание не получается. В цикле поиска распаковываем архивы в подкаталогах и нужно удалить архивы после распаковки, т.к. архиватор сам не может удалить архив после распаковки, то нужно удалить самим распакованный архив, но удать не можем, т.к. архив занят.
| Код | ExecAndWait('rar', 'e -o+ *.rar',Dir, SW_SHOWNORMAL); DeleteFile(SearchRec.name);
| |