Функция Inno Setup AfterInstall вызывается для каждого файла

Я хочу вызвать функцию после установки папки, но InstallEnv функция, кажется, вызывается несколько раз, возможно, для каждого файла есть папка (должна быть подтверждена). Есть ли способ вызвать его только один раз после установки всех этих файлов? Я не могу использовать Run раздел, потому что я хочу сделать перехват ошибок с кодом возврата.

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

2 ответов


Да, он выполняется один раз для каждого файла. The reference говорит об этом (подчеркнуто мной):

функция BeforeInstall или AfterInstall для записи раздела [файлы] использование подстановочного знака вызывается один раз на файл соответствующие подстановки. Использовать CurrentFileName, чтобы проверить, для какого файла вызывается функция.

и нет, нет способа вызвать его один раз после установки всех файлов. Если бы вы собирались запустить его только когда-то это не было бы проблемой, так как вы можете объявить переменную флага, указывающую, что функция уже была вызвана, но вы хотите определить, является ли это последним вызовом, и для этого нет обходного пути.

Ну, может быть, если бы вы знали, какой файл будет последним установленным из этой папки, вы могли бы проверить это на результат CurrentFileName вызов функции, но я сомневаюсь, что вы можете определить, какой из них будет установлен как последний во время компиляции (с во время выполнения в настоящее время нет способа получить список файлов для установки).


нет способа вызвать его в конце установки этой группы файлов, из одной записи. Однако можно вызвать функцию в соответствующее время, используя фиктивную запись:

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

на Source файл должен существовать, но это может быть файл с нулевым байтом. Как установка в {tmp} он будет удален после установки в любом случае, так что его содержимое не имеет значения.

это работает, потому что [Files] элементы устанавливаются в порядке, указанный.