仅当由于onlyifdoesntexist标志未跳过文件时,才调用Inno Setup AfterInstall函数

时间:2018-02-19 15:24:30

标签: inno-setup pascalscript

始终调用

AfterInstall函数,即使文件已存在:

[Files]
Source: "myfile.txt"; DestDir: "{app}"; Flags: onlyifdoesntexist; \
    AfterInstall: MyAfterInstall('{app}\myfile.txt')

如果" myfile.txt"已存在,它不会被覆盖(未安装),在这种情况下不应调用AfterInstall(在我看来)。

1 个答案:

答案 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检索名称。