如何让Inno Setup检查文件是否不存在

时间:2013-04-18 20:46:57

标签: inno-setup pascalscript

当我编译下面的Inno Setup脚本时,它会给我一个错误(下面)。我从here借了代码,所以我不确定为什么它不能正常工作。

Line 136:
Column 10:
Invalid prototype for 'FileDoesNotExist'

第136行是function FileDoesNotExist(file: string): Boolean;

[Run]
Filename: "{sys}\regsvr32.exe"; Parameters: "msstdfmt.dll"; WorkingDir: {app}\Pronto\Programs\; BeforeInstall: FileDoesNotExist(ExpandConstant('{sys}\msstdfmt.dll')); StatusMsg: "Registering Controls..."

[Code]
function FileDoesNotExist(file: string): Boolean;
begin
  if (FileExists(file)) then
    begin
      Result := False;
    end
  else
    begin
      Result := True;
    end;
end;

1 个答案:

答案 0 :(得分:3)

来自Inno Setup documentation

  

所有BeforeInstall和AfterInstall函数必须没有返回值

换句话说,它不能是function,因为它不能返回任何东西;它取而代之的是procedure。 (您可以从链接页面中的示例中看到它们都被声明为procedure,并且其中没有一个在代码中包含Result。)

(您链接的问题也是错误的,BTW。它显示procedure的返回类型为Boolean,这当然是不可能的。我怀疑它是否有效这是因为使用的Pascal解析器没有注意到返回值,因为声明中有procedure。)

无论如何,你似乎正试图做错。如果msstdfmt.dllsetup一起发布,则应将其添加到设置了[Files]onlyifdoesntexist标记的regserver部分。如果它已经安装在用户的系统上,则它应该已经注册。

[Files]
Source: "msstdfmt.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist regserver