When [Files]
部分Source
参数是通配符,隐藏文件将被忽略。看BuildFileList in Compile.pas https://github.com/jrsoftware/issrc/blob/is-6_0_3-2/Projects/Compile.pas#L6054-L6056.
一个简单的解决方案是从源文件中删除隐藏属性。
如果您无法删除隐藏属性(例如,如果您需要在安装时保留它),您可以生成[Files]
节条目使用预处理器 https://jrsoftware.org/ispphelp/,避免使用通配符。
#pragma parseroption -p-
; If the file is found by calling FindFirst without faHidden, it's not hidden
#define FileParams(FileName) \
Local[0] = FindFirst(FileName, 0), \
(!Local[0] ? "; Attribs: hidden" : "")
#define FileEntry(Source, DestDir) \
"Source: \"" + Source + "\"; DestDir: \"" + DestDir + "\"" + \
FileParams(Source) + "\n"
#define ProcessFile(Source, DestDir, FindResult, FindHandle) \
FindResult \
? \
Local[0] = FindGetFileName(FindHandle), \
Local[1] = Source + "\\" + Local[0], \
(Local[0] != "." && Local[0] != ".." \
? (DirExists(Local[1]) \
? ProcessFolder(Local[1], DestDir + "\\" + Local[0]) \
: FileEntry(Local[1], DestDir)) \
: "") + \
ProcessFile(Source, DestDir, FindNext(FindHandle), FindHandle) \
: \
""
#define ProcessFolder(Source, DestDir) \
Local[0] = FindFirst(Source + "\\*", faAnyFile), \
ProcessFile(Source, DestDir, Local[0], Local[0])
#pragma parseroption -p+
Use the ProcessFolder
宏如:
[Files]
#emit ProcessFolder("C:\source", "{app}")
它将生成一个如下脚本:
[Files]
Source: "C:\source\file.txt"; DestDir: "{app}"
Source: "C:\source\subfolder\file.jpg"; DestDir: "{app}\subfolder"
Source: "C:\source\subfolder\hidden.txt"; DestDir: "{app}\subfolder"; Attribs: hidden
(See Inno Setup:如何查看 Inno Setup 预处理器的输出(翻译)? https://stackoverflow.com/q/3328375/850848)
恩特布问题,你指的是 https://stackoverflow.com/q/34050206/850848,是关于复制外部文件,因此它与您的问题无关。