При использовании замечательного установщика Inno setup понадобилось сделать проверку на существование папки для установки программы. Если такая папка есть, то переименовать ее по определенному алгоритму (в моем случае добавлять единичку в конце имени) и не озадачивать пользователя переименованием; и уж тем более не перезаписывать программу. Вот такая задача: дать возможность ставить одну программу несколько раз в разные папки.
В скрипте меняем параметр DefaultDirName вот так:
DefaultDirName={code:newTargetDir}
И в конце скрипта в секции code пишем объявленную функцию newTargetDir:
function newTargetDir(Param : string):string;
var
entry: String;
i: integer;
begin
entry := ExpandConstant('{sd}') + '\MyProgram\';
i := 1;
if DirExists(entry) then
repeat
entry := ExpandConstant('{sd}') + '\MyProgram' + IntToStr(i) + '\';
i := i + 1;
until not dirExists(entry);
result := entry;
end;
Здесь встроенная переменная {sd} означает системный диск.