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

Ama*_*nth 6 inno-setup pascalscript

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

Source: "InputFiles\virtualenv-1.8.2\*"; DestDir: "{tmp}/virtualenv"; \
    Flags: recursesubdirs; AfterInstall: InstallEnv; 
Run Code Online (Sandbox Code Playgroud)

Mir*_*ral 5

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

[Files]
Source: "InputFiles\virtualenv-1.8.2\*"; DestDir: "{tmp}\virtualenv"; Flags: recursesubdirs
Source: dummy.txt; DestDir: {tmp}; AfterInstall: InstallEnv
Run Code Online (Sandbox Code Playgroud)

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

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


TLa*_*ama 3

是的,它每个文件执行一次。关于它的说法reference(由我强调):

使用通配符的 [Files] 节条目的BeforeInstall 或 AfterInstall 函数对于每个与通配符匹配的文件调用一次。使用 CurrentFileName 检查该函数是针对哪个文件调用的。

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

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