Inno setup 安装空文件夹时访问CurrentFileName时发生Inno安装运行时错误
我试图通过Pascal代码访问文件夹中的所有文件。当我遍历空文件夹时,会出现以下错误: 例外:内部错误;试图从属于“[Files]”条目的“Check”、“BeforeInstall”或“AfterInstall”事件函数外部调用“CurrentFileName”函数 我使用的代码是:Inno setup 安装空文件夹时访问CurrentFileName时发生Inno安装运行时错误,inno-setup,pascalscript,Inno Setup,Pascalscript,我试图通过Pascal代码访问文件夹中的所有文件。当我遍历空文件夹时,会出现以下错误: 例外:内部错误;试图从属于“[Files]”条目的“Check”、“BeforeInstall”或“AfterInstall”事件函数外部调用“CurrentFileName”函数 我使用的代码是: [Files] Source: ".\3D_Dlls\*"; DestDir: {app}\3D_Dlls; Flags: ignoreversion recursesubdirs createallsubdir
[Files]
Source: ".\3D_Dlls\*"; DestDir: {app}\3D_Dlls; Flags: ignoreversion recursesubdirs createallsubdirs skipifsourcedoesntexist ; Check: FileBackup
[Code]
function FileBackup(): Boolean;
var FileName,Source,Target,TargetDir: String;
begin
Result := True;
Source := ExpandConstant(CurrentFileName);
end
例如,我的文件夹结构如下所示:
3D_Dlls
- Folder 1
- Folder 2 // Empty folder and it invokes the problem
- Folder 3
我相信这是Inno设置中的一个bug,由
createallsubdirs
标志触发
指定该标志后,Inno安装程序将收集一个单独的空目录列表,这些目录需要在安装过程中显式创建。“安装”空文件夹时,调用CurrentFileName
失败
解决办法:
- 如果可能,请删除
标志 相反,您可以使用显式创建空目录createallsubdirs
- 捕捉异常:
函数文件备份:布尔值; 开始 结果:=真; 尝试 来源:=ExpandConstant(CurrentFileName); 除了 日志(GetExceptionMessage); 结束; 结束;
我已经在Inno Setup新闻组上报告了这一点,但此后新闻组被重置
我相信这是由CreateAllSubDRS标志触发的Inno设置中的一个错误 指定标志后,Inno Setup会收集一个单独的 在过程中需要显式创建的空目录 安装。“安装”空文件夹时,调用 CurrentFileName完全失败 解决办法: 如果可能,请删除CreateAllSubDRS标志 相反,您可以使用[Dirs]显式创建空目录 节 捕捉异常: 谢谢你,马丁。我在这里遇到了同样的问题,我无法删除'createallsubdirs'标志,因为源代码是动态的,我不知道包含什么。在本例中,它有两个空目录。如果我遇到同样的错误,请查看日志: