我有一个文件夹(数据库文件夹),我希望在卸载后保存(用于保存用户数据和将来重新安装),我标记了顶级文件夹永不卸载以及所有文件(和文件夹?)是否为空或者还没有Inno Setup在卸载期间删除这些空的子文件夹(我想保留)。我是否必须声明我想要保留的所有子文件夹,或者是我缺少的标志?
[Dirs]
Name: "{app}\db\data"; Flags: uninsneveruninstall; Permissions: everyone-full
[Files]
Source: "D:\sesam\db\data\*"; DestDir: "{app}\db\data"; Flags: recursesubdirs createallsubdirs uninsneveruninstall; Check: CheckNotExists(ExpandConstant('{app}\db\data'))
卸载前和之后:
正如你所看到的那样,它只会保持非空的"文件夹。
答案 0 :(得分:1)
对我来说看起来像个错误,请考虑报告。
无论如何,您可以使用Inno Setup预处理器为每个子文件夹生成[Dirs]
条目列表:
[Dirs]
#define FindHandle
#define FindResult
#define SourceDataPath "D:\sesam\db\data"
#define TargetDataPath "{app}\db\data"
#sub ProcessFoundFile
#define DirName FindGetFileName(FindHandle)
#define DirPath SourceDataPath + "\" + DirName
#if DirExists(DirPath) && (DirName != ".") && (DirName != "..")
Name: "{#TargetDataPath + "\" + DirName}"; Flags: uninsneveruninstall
#endif
#endsub
#for {FindHandle = FindResult = FindFirst(SourceDataPath + "\*", faDirectory); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile
#expr FindClose(FindHandle)
以上仅适用于单级。如果你需要递归,那就更复杂了。
将它放在脚本的末尾,以查看和查看预处理器生成的内容:
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")