
13.04.2010, 10:41
|
Прохожий
|
|
Регистрация: 13.04.2010
Сообщения: 1
Репутация: 10
|
|
Интеграция Функции CreateProcess в Код
Доброго времени суток. Вот такая беда...нудно интегрировать функцию критпрофесс и ожидание заверщния..в мой код..уже хз сколько рвемени бьюсь над завершением, но видать моих знаний не достаточно. вот и уповаю на помощь профессионалов.
Код:
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);
// [Error] CBackUP.dpr(144): Incompatible types: 'Cardinal' and 'TSearchRec'
делал
Код:
While s>-1 do
begin
DelFile:=SourceDir+Arr_FileName[s];
string (CharToStr(DelFile));
DeleteFile(DelFile);
dec(s);
end;
FindClose(SR);
до лампочки....ну вот как моно пользоваться описанием вещей если они идут изначально не юзабельные(((( уже крыша едит...что нифига не пашет(
если кто поможет..буду очень признателен!
|