Inno setup 安装空文件夹时访问CurrentFileName时发生Inno安装运行时错误

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

我试图通过Pascal代码访问文件夹中的所有文件。当我遍历空文件夹时,会出现以下错误:

例外:内部错误;试图从属于“[Files]”条目的“Check”、“BeforeInstall”或“AfterInstall”事件函数外部调用“CurrentFileName”函数

我使用的代码是:

[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'标志,因为源代码是动态的,我不知道包含什么。在本例中,它有两个空目录。如果我遇到同样的错误,请查看日志:

  • 开始安装过程
  • 试图从属于“[Files]”条目的“Check”、“BeforeInstall”或“AfterInstall”事件函数外部调用“CurrentFilename”函数
  • 正在创建目录:C:\(…)
  • 尝试解决方案对我有效