[InstFiles]在Inno中打包隐藏和系统文件的头文件
Posted chenjian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[InstFiles]在Inno中打包隐藏和系统文件的头文件相关的知识,希望对你有一定的参考价值。
本文来自:http://www.kngstr.com
简介:
一直以来,Inno的作者都没有提供打包隐藏文件和系统文件的功能。
但是,如果我们做批量打包,批量封装的时候,总会需要这样的功能,因为我们不能保证没有隐藏文件。
如果有这些文件,但是没有被打包进去,相信后果大家都懂的。
这次我用ISPP功能做了这么一个头文件,不但可以打包隐藏文件,还能保留属性。(支持 系统 和 隐藏)
用法:
为了让大家用起来顺手,我做了一个最简单的用法,不过,如果你要做的包含很多文件夹,那么请看:Example2.iss
1 ; -- Example1.iss --
2; Demonstrates use InstFiles.ish.
3; Author : KngStr
4; WebSite : http://www.kngstr.com/archive/inno/ish/instfiles/
5
6#include "InstFiles.ish"
7
8[Setup]
9AppName=My Program
10AppVersion=1.5
11DefaultDirName={pf}My Program
12DefaultGroupName=My Program
13UninstallDisplayIcon={app}MyProg.exe
14Compression=lzma2
15SolidCompression=yes
16OutputDir=userdocs:Inno Setup Examples Output
17CreateUninstallRegKey=no
18Uninstallable=no
19
20#expr InstFiles("D:Users", "*.*")
21
如果你需要这个功能,可以下载最后的压缩包,包含了两个示例文件,一个简单的就是贴出来的这个,另外一个是复杂的用法。
测试数据:
用时:1分钟 文件夹:343 文件:12581 内存占用: 37M. 包含隐藏和系统文件
用时:1小时 文件夹:1491 文件:432817 内存占用:900M. 包含隐藏和系统文件
技术细节:
这次做这个头文件,用了我一个星期的时间,因为ISPP限制比较多。做了很多的方案都不合我心里的想法。
- ISPP的 array不能动态修改长度,只能重新声明
- ISPP的 copy函数对长字符串操作的时候会引起内存泄漏,这个已经提交给了作者。
- 如果使用两个array倒数据的话,执行效率会非常的低。
所以,我发布的这个头文件使用了如下的方法:
- array存储文件夹,因为一般来讲文件夹是比较少的
- Files段直接写入到脚本列表
- 统一使用两个段,无论你前面有多少个[Files] 和 [Dirs],头文件添加的都会在最后。
- 用for做循环,不断的添加需要搜索的文件夹,改变count
类似工具推荐:
作者:cntrump
FileToIss 1.0.0.1 [自动搜索文件并写入ISS脚本] - http://bbs.hanzify.org/read-htm-tid-66615.html
LnkToIss 1.0.0.1 自动提取快捷方式信息到ISS脚本文件 - http://bbs.hanzify.org/read-htm-tid-66617.html
小结:
当然,这个只是权益之计,毕竟,ISPP还没有什么好的字符串列表。
如果,你有更好的方案,可以联系我,非常感谢。
另外,如果官方出现合适的功能之后,我也会改写本函数的。
PS: 如果你使用我做的 Inno集成版 的话,就无需下载的了,因为5.5.2的那个版本里面会自带该头文件和示例。
以上是关于[InstFiles]在Inno中打包隐藏和系统文件的头文件的主要内容,如果未能解决你的问题,请参考以下文章
Inno SetupCreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)(转)
Inno Setup CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)
Inno setup打包软件run段了存在.EXE或者.BAT问题?