如何调用外部 iss 脚本并使用代码部分下主 Inno Setup 脚本中的函数?

Hen*_*tie 2 inno-setup pascalscript

我有一个 Inno Setup 脚本,其中包含一些基本内容的代码部分。但我还有另一个专门处理 Windows 服务的 Inno Setup 脚本文件 (.iss)。我想直接从我的主脚本调用这些函数/过程。那么如何将#include文件services.iss放入我的主脚本中,以便我可以从该Code部分调用其函数?

我在网上看到了一些示例,说明如何使用此方法拆分文件部分,这很棒,但我希望能够在安装之间使用通用代码脚本拆分代码部分。我到处都能找到它的提及,但没有任何地方告诉你如何做到这一点。

Mar*_*ryl 6

正如您自己提到的,请使用#include预处理器指令

如果您有一个常见的代码文件,例如common.pas

procedure CommonProcedure;
begin
  // ...
end;
Run Code Online (Sandbox Code Playgroud)

您可以将其包含到主.iss脚本中,例如:

[Code]

#include "common.pas"

function InitializeSetup(): Boolean;
begin
  // Calling procedure included from the common.pas
  CommonProcedure;

  Result := True;
end;
Run Code Online (Sandbox Code Playgroud)

扩展名并不重要。我使用过.pas,因为该文件纯粹是 Pascal(脚本)代码。但如果你愿意.iss,那是你的选择。尽管如此,从语法上讲,将节名称包含到文件中会更合适:

[Code]

procedure CommonProcedure;
begin
  // ...
end;
Run Code Online (Sandbox Code Playgroud)

并将文件包含在该部分之外[Code]

#include "common.pas"

[Code]

function InitializeSetup(): Boolean;
begin
  // Calling procedure included from the common.pas
  CommonProcedure;

  Result := True;
end;
Run Code Online (Sandbox Code Playgroud)

这种方法甚至为您提供了更大的灵活性,例如,如果您的代码需要一些支持文件:

[Files]
Source: "InnoCallback.dll"; Flags: dontcopy

[Code]

procedure CommonProcedure;
begin
  // ...
end;
Run Code Online (Sandbox Code Playgroud)

(虽然这只是编码风格的问题。从技术上讲,这并不重要,因为这些部分可以以任何方式混合。所以你可以先有一个部分[Code],然后是[Files]一个部分,然后是另一个[Code]部分)。