安装空文件夹时访问CurrentFileName时Inno Setup运行时错误

时间:2015-03-18 01:53:27

标签: inno-setup pascalscript

我尝试通过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

2 个答案:

答案 0 :(得分:2)

我认为这是由createallsubdirs标志触发的Inno安装程序中的错误。

指定标志后,Inno安装程序会收集需要在安装期间显式创建的空目录的单独列表。当“安装”空文件夹时,对CurrentFileName的调用就会失败。

解决方法:

  • 如果可能,请删除createallsubdirs标记。

    相反,您可以使用[Dirs] section显式创建空目录。

  • 抓住例外:

    function FileBackup: Boolean; 
    begin 
      Result := True;
      try
        Source := ExpandConstant(CurrentFileName);
      except
        Log(GetExceptionMessage);
      end;
    end;
    

我在Inno Setup新闻组上报道了此消息,但新闻组自此重置。

答案 1 :(得分:1)

  

我相信这是由createallsubdirs标志触发的Inno Setup中的一个错误。

     

指定标志后,Inno Setup会收集一个单独的列表   需要在期间显式创建的空目录   安装。当“安装”空文件夹时,调用   CurrentFileName完全失败。

     

解决方法:

     

如果可能,删除createallsubdirs标志。

     

相反,您可以使用[Dirs]显式创建空目录   部分。

     

抓住例外:

谢谢马丁。我在这里有同样的问题,我无法删除'createallsubdirs'标志,因为源是动态的,我不知道包含什么。在这种情况下,它有两个空目录。我得到同样的错误,请查看日志:

  1. 开始安装过程。
  2. 尝试从属于“[Files]”条目的“Check”,“BeforeInstall”或“AfterInstall”事件函数外部调用“CurrentFilename”函数
  3. 创建目录:C:\(...)
  4. 尝试除了解决方案对我有用!