Вопрос Удаление файлов по логу установки.

Andreo Fadio

Участник
@Xenium, чтобы работало надо задавать:

Exec(ExpandConstant('{cmd}'), ExpandConstant('/C attrib -R -H "appdir\*.*" /s /d'), '', SW_SHOW, ewWaitUntilTerminated, ResultCode);

Или задать значение appdir уже сразу:

appdir := ExpandConstant('{app}');
 

Xenium

Новичок
@Andreo Fadio,
@Xenium, чтобы работало надо задавать:

Exec(ExpandConstant('{cmd}'), ExpandConstant('/C attrib -R -H "appdir\*.*" /s /d'), '', SW_SHOW, ewWaitUntilTerminated, ResultCode);

Или задать значение appdir уже сразу:

appdir := ExpandConstant('{app}');
К сожалению тоже ничего не меняет. Как были файлы readonly так и остались, пока полный путь вручную не прописать.
 
Последнее редактирование:

Xenium

Новичок
@sergey3695, @Andreo Fadio, Думаю попробовать с этим делом что-то....


Код:
function GetFileAttributes(lpFileName: PAnsiChar): DWORD;
external 'GetFileAttributesA@kernel32.dll stdcall';

function SetFileAttributes(lpFileName: PAnsiChar;
   dwFileAttributes: DWORD): BOOL;
external 'SetFileAttributesA@kernel32.dll stdcall';

procedure RemoveReadOnly(FileName : String);
var
Attr : DWord;
begin
  Attr := GetFileAttributes(FileName);
  if (Attr and 1) = 1  then        
  begin
    Attr := Attr -1;
    SetFileAttributes(FileName,Attr);
  end;
end;

/UPD.
Теперь работает, но по отдельности)
Вместе выдает ошибку "list index out of bounds 1"


Код:
SvfList := TStringList.Create;
SvfList.LoadFromFile(ExpandConstant('{app}\INSTALL.LOG'));
  for i := 0 to SvfList.Count-1 do
RemoveReadOnly(ExpandConstant('{app}\'+SvfList[i]));
DeleteFile(ExpandConstant('{app}\'+SvfList[i]));
 
Последнее редактирование:

Xenium

Новичок
@Andreo Fadio,
Код:
    Exec('attrib', ExpandConstant(' -h -s -r /D "{app}\*.*"'),'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
    Exec('attrib', ExpandConstant(' -h -s -r "{app}\*.*"'),'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
потом выполняете приведенный пример очистки.
Так сработало, спасибо)
А что на счет использования procedure RemoveReadOnly ? Ее не лучше использовать вместо обращения к cmd?

Я думаю, что нужно что-то изменить в этом месте
for i := 0 to SvfList.Count-1 do
, но не могу понять что и как.

UPD/ Все оказалось еще проще...))) Проблема решена.
 
Последнее редактирование:
Сверху