7

フォルダーをインストールした後に関数を呼び出したいのですが、InstallEnv関数は複数回呼び出されるようで、おそらく各ファイルはフォルダーです(確認中)。これらのファイルをすべてインストールした後、一度だけ呼び出す方法はありますか? Runリターンコードでエラーキャッチしたいので使えません。

Source: "InputFiles\virtualenv-1.8.2\*"; DestDir: "{tmp}/virtualenv"; \
    Flags: recursesubdirs; AfterInstall: InstallEnv; 
4

2 に答える 2

5

そのファイルのグループのインストールの最後に、単一のエントリ内からそれを呼び出す方法はありません。ただし、ダミー エントリを使用することで、適切なタイミングで関数を呼び出すことができます。

[Files]
Source: "InputFiles\virtualenv-1.8.2\*"; DestDir: "{tmp}\virtualenv"; Flags: recursesubdirs
Source: dummy.txt; DestDir: {tmp}; AfterInstall: InstallEnv

Sourceファイルは存在している必要がありますが、ゼロバイトのファイルでもかまいません。インストールが開始される{tmp}ため、インストール後に削除されるため、その内容は無関係です。

これは、[Files]エントリが指定された順序でインストールされるため機能します。

于 2013-11-28T07:10:34.560 に答える
3

はい、各ファイルごとに 1 回実行されます。はそれreferenceについて述べています(私が強調しました):

ワイルドカードを使用した [Files] セクション エントリの BeforeInstall または AfterInstall 関数は、ワイルドカードに一致するファイルごとに 1 回呼び出されます。CurrentFileName を使用して、関数が呼び出されたファイルを確認します。

いいえ、すべてのファイルがインストールされた後に一度呼び出す方法はありません。一度だけ実行する場合は、関数が既に呼び出されていることを示すフラグ変数を宣言する可能性があるため、問題にはなりませんが、それが最後の呼び出しかどうかを検出する必要があり、このために回避策はありません。

おそらく、どのファイルがそのフォルダーから最後にインストールされるかを知っていれば、関数呼び出しの結果に対してそれをチェックするかもしれませんがCurrentFileName、コンパイル時に最後にインストールされるファイルを判断できるとは思えません (実行時に、インストールするファイルのリストを取得する方法は現在ありません)。

于 2013-11-27T16:52:14.490 に答える