Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];
ВнизМастерам Найти похожие ветки
← →
Dennn_is (2002-05-21 16:40) [0]Делаю архивацию в проге:
ShellExecute(Handle,nil,PChar(ExtractFilePath(application.ExeName)+"arj.exe"),PChar("a rrrrr Data\Izm_12.mdb"),nil,SW_SHOWNORMAL);
Вызывается архиватор ARJ и какое-то время архивирует БД (зависит от размера БД), после чего НУЖНО скопировать созданный архив в другую папку. Проблема в том, что я никак не могу отследить момент окончания архивации. Кто нибудь может помочь, как мне это реализовать? Спасибо.
← →
AFROLOV (2002-05-21 17:27) [1]Смотри в FAQ на этом сайте - дождаться завершения другого приложения(в твоем случае arj)
или на http://www.sources.ru/delphi/system/winexecandwait.shtml
← →
Song (2002-05-21 17:31) [2]Используйте WaitForSingleObject() либо TShellExecuteInfo
← →
Владимир Васильев (2002-05-21 20:20) [3]Есть очень полезный пакет JCL : http://www.delphi-jedi.org/Jedi:CODELIBJCL:51032
CommandLine:=GetName("Codec\DivX501Bundle.exe");
if not ShellExecAndWait(CommandLine,Param,"OPEN",SW_SHOW )
then ShowMessage("Not installed");
← →
arbiter (2002-05-22 07:13) [4]бывает такая ещё засада с настройками сессии dos.
WaitForSingleObject в этом случае просигнализирует только в том случае когда завершена сессия dos, а не собственно программа.
То есть arj отработает и завершится, но WaitForSingleObject просигнализирует только тогда когда будет закрыто окно сессии. Что не одно и то же.
← →
Art1 (2002-05-22 10:10) [5]А не проще ли сделать архивацию и копирование в батничке, а потом его вызывать? Bat-файл при необходимость легко правится программно, т.е. подредактировал батник и запустил его. Я так делал и у меня все работало на УРА.
← →
AFROLOV (2002-05-22 10:22) [6]to
> arbiter © (22.05.02 07:13)
> бывает такая ещё засада с настройками сессии dos....
Arj надо брать под Win32 тогда этой проблемы не будет. Я это делал правда на VB.
← →
Song (2002-05-22 10:28) [7]Для DOS приложений я эту проблему решал так: в цикл TShellExecuteInfo где крутится GetProcessExitCode я ставил проверку на FindWindow() на тот момент когда Caption будет такой: ".... (Сеанс завершен)"
← →
Dennn_is (2002-05-22 11:06) [8]Нашел в FAQ такой пример использования WaitForSingleObject:
procedure TForm1.Button1Click(Sender: TObject);
var
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
cmdline:string;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
cmdline:="c:\command.com";
if not CreateProcess( nil, // No module name (use command line).
PChar(cmdline), // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
nil, // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then
begin
ShowMessage( "CreateProcess failed." );
Exit;
end;
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
ShowMessage("Done !");
end;
А как теперь подцепить к этому процессу мою архивацию? подскажите пожалуйста!
← →
Song (2002-05-22 11:10) [9]Заполняй параметры CreateProcess()
← →
AFROLOV (2002-05-22 11:37) [10]cmdline:="c:\arj a ....."- строка на архивацию, и этого достаточно.
← →
Dennn_is (2002-05-22 11:42) [11]Я сделал так:
cmdline:=ExtractFilePath(application.ExeName)+"arj.exe";
if not CreateProcess(PChar(cmdline),
PChar("a arhiv Data\Izm_12.mdb",
nil,
nil,
False,
0,
nil,
nil,
si,
pi )
И нифига, архиватор ругается на "arhiv" - invalid parameter, хотя из командной строки пишу тоже самое - все ОК.
← →
Song (2002-05-22 11:47) [12]забыл у PChar вторую скобку закрыть
← →
Dennn_is (2002-05-22 12:22) [13]Огромное спасибо всем ответившим! Вроде работает, еще маненький вопросик: архиватор делает архив с вложенными папками, например:
путь где должен лежать архив: "D:Papka1\Papka2\Papka3\Arhiv" и архиватор создаст архив с такой же структурой, т.е. в нем будет:
Papka1\Papka2\файл, который заархивировали.
Можно как-нить избежать вложения в архив этих папок? чтобы в архиве был только архивируемый файл, без папок?
← →
Song (2002-05-22 12:40) [14]У arj.exe есть соответсвющий ключ.
← →
Dennn_is (2002-05-22 12:47) [15]Уважаемы Song, не подскажите какой? Отдельное огромное спасибо Вам за советы
← →
Song (2002-05-22 12:56) [16]<Switches>
c: skip time-stamp Check
r: Recurse subdirectories
e: Exclude paths from names
← →
erik (2002-05-22 18:06) [17]Я сделал еже готовую систему для архивации в заданое время. Причем может работать в виде сервиса, формат запуска по времени задается в виде Cron, используется Zip.dll Скорость очень приличная(перебрал 10 архиваторов). Работает с файлами больше 2Gb
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c