AfterInstall
函数,即使文件已存在:
[Files]
Source: "myfile.txt"; DestDir: "{app}"; Flags: onlyifdoesntexist; \
AfterInstall: MyAfterInstall('{app}\myfile.txt')
如果" myfile.txt"已存在,它不会被覆盖(未安装),在这种情况下不应调用AfterInstall
(在我看来)。
答案 0 :(得分:0)
您可以使用Check
parameter代替onlyifdoesntexist
标记。
[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Check: OnlyIfDoesntExist; \
AfterInstall: MyAfterInstall
[Code]
function OnlyIfDoesntExist: Boolean;
var
FileName: string;
begin
FileName := ExpandConstant(CurrentFilename);
Result := not FileExists(FileName);
if Result then
begin
Log(Format('Installing "%s" as the file does not exists yet.', [FileName]));
end
else
begin
Log(Format('Skipping "%s" as the files exists already.', [FileName]));
end;
end;
procedure MyAfterInstall;
begin
Log(Format('Installed "%s".', [ExpandConstant(CurrentFilename)]));
end;
请注意,多次调用Check
函数,因此您将在日志中多次看到相应的消息。如果您碰巧将支票转换为昂贵的功能,则最好缓存结果。
另请注意,您无需将文件名传递给AfterInstall
程序,因为您可以使用CurrentFilename
function检索名称。