
25.01.2010, 09:41
|
 |
Местный
|
|
Регистрация: 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;
|