我尝试通过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
答案 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'标志,因为源是动态的,我不知道包含什么。在这种情况下,它有两个空目录。我得到同样的错误,请查看日志:
尝试除了解决方案对我有用!