2

我正在尝试编写一个 Inno Setup 安装程序来安装然后运行其他安装程序。我遇到的问题是尝试安装 Cygwin 时。我已经下载了 Cygwin 和我需要的所有软件包,因此我可以执行本地安装。然后我想在 Cygwin 安装中添加额外的文件和目录。

我的第一次尝试是这样的:

[Files]
Source: "{#Cygwin}\Cygwin\*"; DestDir: {tmp}\cygwin; Flags: recursesubdirs;
Source: "{#Cygwin}\additional\*"; DestDir: {tmp}\cygwin\additional; Flags: recursesubdirs

[Run]
Filename: "{tmp}\cygwin\setup-x86_64.exe"; Parameters: "-q -L"; WorkingDir: "{tmp}";

但这意味着我必须有一个脚本来添加其他文件,因为在通过该[Run]部分中的命令实际安装 Cygwin 之前无处放置它们。

在添加其他文件之前,我曾尝试使用BeforeInstall该部分中的脚本[Files]来运行 Cygwin 安装程序,但是因为我必须使用通配符,Source: "{#Cygwin}\additional\*";并且为目录树中的每个文件调用一次脚本。

Inno [Files]Setup 部分似乎只接受源文件,而不接受源目录,除非目录有通配符。

有没有一种方法可以让它从目录树中安装所有内容而不使用通配符,或者有没有一种方法可以让BeforeInstall脚本只运行一次,而不管复制了多少文件?

4

1 回答 1

0

仅在第一次调用BeforeInstall函数时安装 Cygwin。

var
  CygwinInstalled: Boolean;

procedure MyBeforeInstall;
begin
  if CygwinInstalled then
  begin
    Log('Cygwin installed already');
  end
    else
  begin
    Log('Installing Cygwin');

    { install Cygwin here }

    CygwinInstalled := true;
  end;
end;
于 2015-10-28T14:07:22.160 回答