[InstFiles]在Inno中打包隐藏和系统文件的头文件

本文来自:http://www.kngstr.com

简介:

一直以来,Inno的做者都没有提供打包隐藏文件和系统文件的功能。html

可是,若是咱们作批量打包,批量封装的时候,总会须要这样的功能,由于咱们不能保证没有隐藏文件。app

若是有这些文件,可是没有被打包进去,相信后果你们都懂的。函数

此次我用ISPP功能作了这么一个头文件,不但能够打包隐藏文件,还能保留属性。(支持 系统 和 隐藏)工具

用法:

为了让你们用起来顺手,我作了一个最简单的用法,不过,若是你要作的包含不少文件夹,那么请看:Example2.iss测试

其中InstFiles.ish放到inno setup的Examples文件夹中code

   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
htm

若是你须要这个功能,能够下载最后的压缩包,包含了两个示例文件,一个简单的就是贴出来的这个,另一个是复杂的用法。blog

测试数据:

用时:1分钟   文件夹:343    文件:12581   内存占用: 37M.   包含隐藏和系统文件
用时:1小时   文件夹:1491  文件:432817  内存占用:900M. 包含隐藏和系统文件

内存

技术细节:

此次作这个头文件,用了我一个星期的时间,由于ISPP限制比较多。作了不少的方案都不合我内心的想法。字符串

  1. ISPP的 array不能动态修改长度,只能从新声明
  2. ISPP的 copy函数对长字符串操做的时候会引发内存泄漏,这个已经提交给了做者。
  3. 若是使用两个array倒数据的话,执行效率会很是的低。

因此,我发布的这个头文件使用了以下的方法:

  1. array存储文件夹,由于通常来说文件夹是比较少的
  2. Files段直接写入到脚本列表
  3. 统一使用两个段,不管你前面有多少个[Files]  [Dirs],头文件添加的都会在最后。
  4. 用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的那个版本里面会自带该头文件和示例。

 

 

相关文章
相关标签/搜索