Тема: WinRAR & delphi
Показать сообщение отдельно
  #4  
Старый 25.01.2010, 09:41
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Я архивировал через rar.exe (консольный rar)
И с помощью функции ExecOSCommand передавал нужные параметры
сама функция:
Код:
function ExecOSCommand(
  CommandStr : string;
  Show : Integer;
  WaitForComplete,
  IsInternalCommand : Boolean
) : THandle;
var
  PTemp : array [0..100] of char;
  PCommand : array [0..1000] of char;

  SInfo : TStartupInfo;
  PInfo : TProcessInformation;
  tmpExitCode : DWORD;
begin
//
// Из переменных окружения вытягиваем имя командного процессора
//   и строим команду
//
  if IsInternalCommand then begin
    StrPCopy(PTemp, 'COMSPEC');
    GetEnvironmentVariable(PTemp, PCommand, SizeOf(PCommand));
    StrCat(PCommand, ' /C ');
    StrPCopy(PCommand + StrLen(PCommand), CommandStr);
  end
  else
    StrPCopy(PCommand, CommandStr);
//
// Исполняем команду
//
  FillChar(SInfo, SizeOf(SInfo), 0);
  SInfo.cb := SizeOf(SInfo);
  SInfo.dwFlags := STARTF_USESHOWWINDOW;
  SInfo.wShowWindow := Show;

  if not CreateProcess(nil, PCommand, nil, nil, FALSE,
    0, nil, nil, SInfo, PInfo) then
    raise ECitCmdNotStarted.Create('Невозможно выполнить команду ''' +
      CommandStr + '''');
  try
    if WaitForComplete then
    begin
      //
      // Ожидаем завершения
      //
      WaitForSingleObject(PInfo.hProcess, INFINITE);
      GetExitCodeProcess(PInfo.hProcess, tmpExitCode);

      if tmpExitCode <> 0 then
        raise ECitNonzeroExitCode.Create(' Команда ''' + CommandStr + ''''#10#13 +
                               ' имеет ошибочный код возврата :'+ IntToStr(tmpExitCode));
    end;
  finally
    //
    // Чистим за собой
    //
    CloseHandle(PInfo.hThread);
    CloseHandle(PInfo.hProcess);
  end;
Ответить с цитированием