在安装目录树之前执行一次脚本

时间:2015-10-28 11:11:08

标签: inno-setup pascalscript directory-tree

我正在尝试编写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 Setup的[Files]部分似乎只接受源文件,而不是源目录,除非该目录有通配符。

有没有办法可以让它在不使用通配符的情况下从目录树安装所有内容,或者有没有办法让BeforeInstall脚本只运行一次,无论复制多少文件?< / p>

1 个答案:

答案 0 :(得分: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;