Inno Setup为每个文件调用AfterInstall函数

时间:2013-11-27 16:48:48

标签: inno-setup pascalscript

我想在安装文件夹后调用一个函数,但InstallEnv函数似乎被调用了几次,可能每个文件都是文件夹(待确认)。有没有办法在安装所有这些文件后只调用一次?我无法使用Run部分,因为我想使用返回码进行错误捕获。

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

2 个答案:

答案 0 :(得分:5)

在单个条目中,无法在安装该组文件时调用它。但是,可以通过使用虚拟条目在适当的时间调用该函数:

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

Source文件必须存在,但它可以是零字节文件。当安装进入{tmp}时,它将在安装后被删除,因此其内容无关紧要。

这是有效的,因为[Files]条目按指定的顺序安装。

答案 1 :(得分:3)

是的,每个文件执行一次。 reference对此有所说明(我强调):

  

[Files]部分条目的BeforeInstall或AfterInstall函数   使用通配符每个文件调用一次匹配通配符。使用   CurrentFileName用于检查函数调用的文件。

不,在安装完所有文件后,无法调用一次。如果你只打算运行一次,那就不会有问题,因为你可能会声明一个标志变量,表明该函数已被调用,但是你想检测它是否是最后一次调用,为此你需要没有解决方法。

好吧,也许如果您知道哪个文件是从该文件夹安装的最新文件,您可能会根据CurrentFileName函数调用的结果进行检查,但我怀疑您是否可以确定哪个将是在编译时安装为最后一个(因为在运行时,目前无法获取要安装的文件列表)。