6

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

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;
4

1 回答 1

4

Inno Setup 文档中:

所有的 BeforeInstall 和 AfterInstall 函数都不能有返回值

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

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

无论如何,您似乎正在尝试做错事。如果msstdfmt.dll与您的 一起分发setup,您应该将其添加到设置了和标志的[Files]部分。如果它已经安装在用户的系统上,它应该已经注册。onlyifdoesntexistregserver

[Files]
Source: "msstdfmt.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist regserver 
于 2013-04-18T23:33:02.980 回答