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)
在单个条目中,无法在安装该组文件的末尾调用它.但是,可以通过使用虚拟条目在适当的时间调用该函数:
[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]条目按指定的顺序安装.
是的,它每个文件执行一次。关于它的说法reference(由我强调):
使用通配符的 [Files] 节条目的BeforeInstall 或 AfterInstall 函数对于每个与通配符匹配的文件调用一次。使用 CurrentFileName 检查该函数是针对哪个文件调用的。
不,安装完所有文件后无法调用它一次。如果您只想运行一次,那不会有问题,因为您可以声明一个标志变量,表明该函数已经被调用,但您想检测它是否是最后一次调用,为此有没有解决方法。
好吧,也许如果您知道哪个文件将是该文件夹中最新安装的文件,您可以根据函数调用的结果检查该文件CurrentFileName,但我怀疑您是否可以确定在编译时最后安装哪个文件(因为在运行时,目前无法获取要安装的文件列表)。