Вопрос Как удалить файлы в папке перед установкой ?

Статус
В этой теме нельзя размещать новые ответы.

EvilAlex

Старожил
Всем бобров !
Собственно название темы и сам вопрос, суть в том чтобы при запуске инсталла и перед установкой он очищал папки...
Вот чем пользуюсь я. но эффекта ни какого...
Код:
procedure CurStepChanged(CurStep: TSetupStep);
begin
  If CurStep=ssInstall then
begin
  DelTree(ExpandConstant('{app}\res_mods\0.9.6'), True, True, True);
  DelTree(ExpandConstant('{app}\res_mods\config'), True, True, True);
  DelTree(ExpandConstant('{app}\res_mods\mods'), True, True, True);
  CreateDir(ExpandConstant('{app}\res_mods\0.9.6'));
end;
end;
Подскажите пожалуйста код ....
Заранее спасибо!
 

Вложения

Kotyarko_O

Новичок
Не извлекается содержимое архива.

суть в том чтобы при запуске инсталла он очищал папки...
Не самое рациональное решение. Константа {app} в этот момент ещё не известна. Можно применить функцию поиска пути по реестру (но и она же не всегда может помочь).

А приведённый вами код должен отрабатывать..
 

vint56

Ветеран
Проверенный
он работает если есть эти папки он удаляет и создает папку 0.9.6
а если система 32 бита
er := RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', InsPath);
 
Последнее редактирование:

EvilAlex

Старожил
Решил проблему таким способом...
Код:
Procedure CurPageChanged(CurPageID: Integer);
Begin case CurPageID of
wpInstalling:
      begin
DelTree(ExpandConstant('{app}')+'\res_mods\*', False, True, True);
      end;
end;
end
Спасибо за подсказку !
 

EvilAlex

Старожил
он работает если есть эти папки он удаляет и создает папку 0.9.6
а если система 32 бита
er := RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', InsPath);
Спасибо, но этот не подходит, так как клиент не установлен. а скопирован и в реестре нет данной строки... Но спасибо !
 

Snoopak96

Старожил
EvilAlex,
Код:
function RemoveDirectory(Name: PAnsiChar): boolean; external 'RemoveDirectoryA@kernel32.dll stdcall';
function DeleteFile(FmemName: PAnsiChar): Boolean; external 'DeleteFileA@kernel32.dll stdcall';

function ClearDir(const Directory: Ansistring): Boolean;
var
  FindRec: TFindRec;
begin
  if FindFirst(ExpandConstant(Directory + '\*.*'), FindRec) then
  try
  repeat
  if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
  DeleteFile(Directory +'\'+FindRec.Name);
  until
  not FindNext(FindRec);
  finally
  FindClose(FindRec);
  end;
  RemoveDirectory(Directory);
  if DirExists(Directory) then Result := false else Result := true;
end;

  if DirExists(ExpandConstant('{app}\res_mods\0.9.6')) then if not DelTree(ExpandConstant('{app}\res_mods\0.9.6'), True, True, True) then ClearDir(ExpandConstant('{app}\res_mods\0.9.6'));
  if DirExists(ExpandConstant('{app}\res_mods\config')) then if not DelTree(ExpandConstant('{app}\res_mods\config'), True, True, True) then ClearDir(ExpandConstant('{app}\res_mods\config'));
  if DirExists(ExpandConstant('{app}\res_mods\mods')) then if not DelTree(ExpandConstant('{app}\res_mods\mods'), True, True, True) then ClearDir(ExpandConstant('{app}\res_mods\mods'));
На коленке писал, проверять надо, и плюсом папку занятую каким-либо процессом никто не отменял.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху