首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止Inno安装程序卸载使用createallsubdirs标志创建的空目录

防止Inno安装程序卸载使用createallsubdirs标志创建的空目录
EN

Stack Overflow用户
提问于 2016-08-10 07:16:12
回答 1查看 96关注 0票数 1

我有一个文件夹(数据库文件夹),我想要保留在卸载后(为保存用户数据和未来重新安装),我已经标记顶部文件夹,永远不要卸载,以及它的所有文件(和文件夹?)无论是否为空,Inno安装程序在卸载期间删除这些空子文件夹(我希望保留这些子文件夹)。我是否必须声明我想保留的所有子文件夹,还是它们是我丢失的标志?

代码语言:javascript
复制
[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'))

卸载之前和之后:

如您所见,它只保留“非空”文件夹。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-10 08:14:19

在我看来是个窃听器,考虑一下报告吧。

无论如何,您可以使用Inno安装前处理器为每个子文件夹生成一个[Dirs]条目列表:

代码语言:javascript
复制
[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)

以上工作只适用于单一级别。如果你需要递归,那就更复杂了。

将其放在脚本的末尾以查看和查看预处理器生成的内容:

代码语言:javascript
复制
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38866593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档