Функция 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]
элементы устанавливаются в порядке, указанный.