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、セクションのスクリプトを使用して Cygwin インストーラーを実行しようとしましたが、スクリプトでワイルドカードを使用する必要があるため、ディレクトリ ツリー内のすべてのファイルに対して 1 回呼び出されます。[Files]Source: "{#Cygwin}\additional\*";

[Files]Inno Setupのセクションは、ディレクトリにワイルドカードがない限り、 source filesのみを受け入れ、 source directoryは受け入れないようです。

ワイルドカードを使用せずにディレクトリ ツリーからすべてをインストールする方法はありますか? またはBeforeInstall、コピーされるファイルの数に関係なく、スクリプトを 1 回だけ実行する方法はありますか?

4

1 に答える 1

0

関数の最初の呼び出しでのみ Cygwin をインストールしますBeforeInstall

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 に答える