Inno setup 使用Inno安装程序安装隐藏文件
我需要使用使用Inno setup创建的设置在最终用户计算机上安装一组跨越多个文件夹的隐藏文件。我已经提到了,但是这里指定的DirectoryCopy函数似乎将文件从同一台机器复制到同一台机器Inno setup 使用Inno安装程序安装隐藏文件,inno-setup,Inno Setup,我需要使用使用Inno setup创建的设置在最终用户计算机上安装一组跨越多个文件夹的隐藏文件。我已经提到了,但是这里指定的DirectoryCopy函数似乎将文件从同一台机器复制到同一台机器 我需要从setup.exe文件中提取隐藏文件,然后安装到最终用户计算机上,这将不同于创建安装程序的计算机。当[文件]节源参数为通配符时,隐藏文件将被忽略。看 一个简单的解决方案是从源文件中删除隐藏属性 如果无法删除隐藏属性(例如,如果需要在安装时保留该属性),则可以使用生成[Files]节项,避免使用通
我需要从setup.exe文件中提取隐藏文件,然后安装到最终用户计算机上,这将不同于创建安装程序的计算机。当
[文件]
节源参数为通配符时,隐藏文件将被忽略。看
一个简单的解决方案是从源文件中删除隐藏属性
如果无法删除隐藏属性(例如,如果需要在安装时保留该属性),则可以使用生成[Files]
节项,避免使用通配符
#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+
使用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
(见附件)
Ntb是关于复制外部文件的,因此它与您的问题无关。我需要在安装文件时保留文件的隐藏属性,上面的源代码有效。谢谢:我刚刚添加了Attribs:hidden代码>在标志前面的末尾:
完成得非常完美<代码>源代码:“C:\Source\subfolder\hidden.txt”;DestDir:“{app}\subfolder”;属性:隐藏;标志:忽略版本