![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Всем привет! Нврод помогите кто чем может, исходником, аль ссылкой на тему или faq.
У меня такая задача. Моя прога должна запускать архивирование, ждать и только после того этого продолжать работу. У меня такой вариант, но мне кажется он не очень хороший. Код:
var rar : string; arcname : string; packname : string; RunName : string; begin arcname := 'c:\web.rar'; packname := 'c:\data.txt'; rar := 'c:\rar.exe a '; RunName := rar + archname + ' ' + packname; WinExec(pchar(RunName),SW_HIDE); while true do begin Application.ProcessMessage; if FileExists(pchar(ArcName)) then break; end; // далее выполняется обработка end; Последний раз редактировалось dmdx, 10.12.2008 в 17:57. |
|
#2
|
|||
|
|||
|
Проблема в
Код:
if FileExists(pchar(ArcName)) then |
|
#3
|
|||
|
|||
|
В принципе неверно. Тебе нужна функция CreateProcess, которая вернет тебе хэндл процесса и пока этот процесс работает тебе надо ждать.
Вот кусок кода из проекта, запускающего консольное приложение и ждущего, пока оно отработает: Код:
// call pcpos
FName := FWorkPlaceOptions.PCPOSFilePath + 'out.pos';
DeleteFile(FName);
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := nil;
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWNORMAL;
si.lpReserved2 := nil;
si.cbReserved2 := 0;
si.cb := SizeOf(si);
if CreateProcess(PChar(FWorkPlaceOptions.PCPOSPath),
nil,
nil,
nil,
BOOL(FALSE),
CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE,
nil,
PChar(ExtractfilePath(FWorkPlaceOptions.PCPOSPath)),
si,
pi) = BOOL(FALSE) then
raise Exception.Create(PCPOSRunFault);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
Application.ProcessMessages; |