防止 Inno Setup 卸载使用 createallsubdirs 标志创建的空目录
Preventing Inno Setup from uninstalling empty directories created with createallsubdirs flag
我有一个文件夹(数据库文件夹)我想在卸载后保留(用于保存用户数据和将来重新安装),我已将顶级文件夹及其所有文件(和文件夹?)标记为永不卸载无论是否为空 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'))
卸载前和卸载后:
如您所见,它只保留 "non empty" 个文件夹。
在我看来像是一个错误,请考虑报告它。
无论如何,您可以使用 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")
我有一个文件夹(数据库文件夹)我想在卸载后保留(用于保存用户数据和将来重新安装),我已将顶级文件夹及其所有文件(和文件夹?)标记为永不卸载无论是否为空 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'))
卸载前和卸载后:
如您所见,它只保留 "non empty" 个文件夹。
在我看来像是一个错误,请考虑报告它。
无论如何,您可以使用 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")