|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Запуска арзивирования rar
Всем привет! Нврод помогите кто чем может, исходником, аль ссылкой на тему или 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; |