![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток. Вот такая беда...нудно интегрировать функцию критпрофесс и ожидание заверщния..в мой код..уже хз сколько рвемени бьюсь над завершением, но видать моих знаний не достаточно. вот и уповаю на помощь профессионалов.
Код:
program CBackUP; {$APPTYPE CONSOLE} uses SysUtils, IniFiles, ShellAPI, DateUtils, ExtActns; var IniFile: TIniFile; // инициализация Ини файла ProgDir: String[60];//Дирректория где храниться наш ини, в моей программе он храниться в её дирректории POut:string;//Откуда берем файлы для архивации, путь PIn:string; // куда делаю Бекап Options:string; //параметры настройки винрара Param:String; //склееные параметры для винрара с учетом опция пути куда и откуда //a:string; PoutName:string; //имя папки архива a:integer; j:integer; //счетчик цикла n:integer; s:integer; //береться с ини файла,значение определяющее количесво баз для архивации. Date:string; SDate:String; SDate1:String; Date1:string; filename :string; Arr_FileName: Array[0..100]of string; //переменные для очистки SR: TSearchRec; I: Integer; to_delete, SourceDir : string; begin //вытаскиваем параметры с Инифайлы GetDir(0,ProgDir); IniFile:=TIniFile.Create(ProgDir+'\BackUp.ini'); n:=IniFile.ReadInteger('Cikl','Schetchik',n); Options:=IniFile.ReadString('Parametr','WinRar',''); PIn:=IniFile.ReadString('BackUp','BackupPath',''); //работа с датой SDate:=DateTimeToStr(now); for j:=1 to 10 do begin Date:=Date+SDate[j]; end; SDate1:=Date[7]+Date[8]+Date[9]+Date[10]+Date[6]+Date[4]+Date[5]+Date[6]+Date[1]+Date[2]; for j:=1 to 10 do Date1:=Date1+SDate1[j]; //------------------ //нужная вещь n:=n-1; //цикл шерстит инифаqл и вытаскивает по очереди базы и архивирует их for j:=0 to n do begin GetDir(0,ProgDir); IniFile:=TIniFile.Create(ProgDir+'\BackUp.ini'); POut:=IniFile.ReadString('Base'+IntToStr(j),'Path',''); PoutName:=IniFile.ReadString('Base'+IntToStr(j),'Name',''); Param:=Options+' '+PIn+PoutName+'_'+Date1+'.rar'+' '+POut; ShellExecute(HInstance,'open','C:\Program Files\WinRAR\Rar.exe',PChar(Param), nil, 1); //ждем окончания работы sleep(60000); IniFile.Free; end; //поиск удаление n:=n+1; for j:=0 to n do begin IniFile:=TIniFile.Create(ProgDir+'\BackUp.ini'); SourceDir:=IniFile.ReadString('BackUp','BackupPath',''); PoutName:=IniFile.ReadString('Base'+IntToStr(j),'Name',''); I := FindFirst(SourceDir +Poutname+'_'+ '*.rar', faAnyFile, SR); to_delete:=SourceDir + string(SR.Name); Arr_FileName[0]:=string(SR.Name); a:=1; while I = 0 do begin I := FindNext(SR); filename:=SR.Name; Arr_FileName[a]:=FileName; inc(a); end; s:=a-7; if a>6 then begin While s>-1 do begin DeleteFile(SourceDir+Arr_FileName[s]); dec(s); end; FindClose(SR); end; end; end. вставить функцию вместо Shell Код:
FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0); with StartUpInfo do begin cb := SizeOf(TStartUpInfo); dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; wShowWindow := SW_SHOWNORMAL; end; Rlst := CreateProcess('C:\Program Files\WinRAR\Rar.exe', Param, nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo); if Rlst then with ProcessInfo do begin WaitForInputIdle(hProcess, INFINITE); // WaitforSingleObject(ProcessInfo.hProcess, INFINITE); // GetExitCodeProcess(ProcessInfo.hProcess, ExitCode); // CloseHandle(hThread); // CloseHandle(hProcess); // end else Error := GetLastError; end; подключая модуль windows, у меня в строках появляются ошибки Код:
While s>-1 do begin DeleteFile(SourceDir+Arr_FileName[s]);//Incompatible types: 'String' and 'PAnsiChar' dec(s); end; FindClose(SR); делал Код:
While s>-1 do begin DelFile:=SourceDir+Arr_FileName[s]; string (CharToStr(DelFile)); DeleteFile(DelFile); dec(s); end; FindClose(SR); если кто поможет..буду очень признателен! |