Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.12.2008, 17:43
dmdx dmdx вне форума
Начинающий
 
Регистрация: 24.05.2008
Адрес: Москва
Сообщения: 133
Репутация: 15
По умолчанию Запуска арзивирования 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  
Старый 10.12.2008, 18:02
dmdx dmdx вне форума
Начинающий
 
Регистрация: 24.05.2008
Адрес: Москва
Сообщения: 133
Репутация: 15
По умолчанию

Проблема в
Код:
   if FileExists(pchar(ArcName)) then
может использовать FileOpen но тогда с каким доступом правом доступа?
__________________
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит
Прапор: вы не попали ни один раз.
Программист: Пули вылетели, проблемы у вас.
Ответить с цитированием
  #3  
Старый 10.12.2008, 18:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В принципе неверно. Тебе нужна функция 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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter