阻止Inno安装程序卸载使用createallsubdirs标志

时间:2016-08-10 07:16:12

标签: inno-setup

我有一个文件夹(数据库文件夹),我希望在卸载后保存(用于保存用户数据和将来重新安装),我标记了顶级文件夹永不卸载以及所有文件(和文件夹?)是否为空或者还没有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'))

卸载前和之后:

enter image description here enter image description here

正如你所看到的那样,它只会保持非空的"文件夹。

1 个答案:

答案 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")