#define MaxBackup 3 [Setup] AppName=My Program AppVerName=My Program version 1.5 DefaultDirName={pf}\My Program Compression=lzma SolidCompression=yes Uninstallable=no [Files] Source: Files\*.*; DestDir: {app}; BeforeInstall: CreateBackup [Code] var ArcDir: String; DirNames: TStringList; procedure CreateBackup(); var SrcFile, DestFile: string; begin ArcDir:= AddBackslash(ExpandConstant('{app}\Backup')) + GetDateTimeString('yyyy/mm/dd hh:nn', '_', '.' ); ForceDirectories(ArcDir); SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName); DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName); FileCopy(SrcFile, DestFile, False); end; procedure GetBackupCount(); var FindRec: TFindRec; begin if FindFirst(ExpandConstant('{app}\Backup\*'), FindRec) then begin try DirNames:= TStringList.Create(); DirNames.Sorted:= True; repeat if (FindRec.Attributes = FILE_ATTRIBUTE_DIRECTORY) and (FindRec.Name <> '.') and (FindRec.Name <> '..') then begin DirNames.Append(FindRec.Name); end; until not FindNext(FindRec); finally FindClose(FindRec); end; end; end; procedure CurStepChanged(CurStep: TSetupStep); var i: integer; begin if CurStep = ssInstall then begin GetBackupCount(); if DirNames.Count >= StrToInt(ExpandConstant('{#MaxBackup}')) then begin for i:= DirNames.Count - StrToInt(ExpandConstant('{#MaxBackup}')) downto 0 do begin DelTree(ExpandConstant('{app}\Backup\') + DirNames[i], True, True, True); end; end; end; end; |