Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.04.2010, 10:41
D_A_akella D_A_akella вне форума
Прохожий
 
Регистрация: 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);
до лампочки....ну вот как моно пользоваться описанием вещей если они идут изначально не юзабельные(((( уже крыша едит...что нифига не пашет(

если кто поможет..буду очень признателен!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter