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

简介:

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

但是,如果我们做批量打包,批量封装的时候,总会需要这样的功能,因为我们不能保证没有隐藏文件。

如果有这些文件,但是没有被打包进去,相信后果大家都懂的。

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

用法:

为了让大家用起来顺手,我做了一个最简单的用法,不过,如果你要做的包含很多文件夹,那么请看:Example2.iss

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

   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限制比较多。做了很多的方案都不合我心里的想法。

  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的那个版本里面会自带该头文件和示例。

[InstFiles]在Inno中打包隐藏和系统文件的头文件的更多相关文章

  1. C语言中你可能不熟悉的头文件(stdlib.h)

    C语言中你可能不熟悉的头文件<cstdlib>(stdlib.h) C Standard General Utilities Library (header) C标准通用工具库(头文件) ...

  2. linux内核中链表代码分析---list.h头文件分析(一)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637596.html linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17 ...

  3. linux内核中链表代码分析---list.h头文件分析(二)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...

  4. 用CBrother将excel中的数据转换为C语言头文件

    用CBrother将excel中的数据转换为C语言头文件 最近在工作中,产品这边总是要调整一些参数,而我们在这一块要求所有的配置必须用宏定义来做,因为不同型号直接硬编码写死在代码里,但是一但数量大了, ...

  5. Linux 中C/C++ search path(头文件搜索路径)

    https://blog.csdn.net/BjarneCpp/article/details/76135980 起因 我拿到了一套Linux下的C++代码,代码中有这个头文件#include < ...

  6. VS2010中如果忘记函数所在的头文件或者忘记函数的输入输出参数类型怎么办?

    先随便找一个熟悉的函数,右击-转到定义,然后写出目标函数,右击-转到定义

  7. C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)

      c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络 ...

  8. 【转】Eclipse中一键调用javah生成jni的头文件

    这里定义了一个本地方法jni_test,该方法返回一个String.其中System.loadLibrary是用来加载本地库的(dll或者so). 有了这个类以后,就可以调用javac命令编译,得到E ...

  9. 【转】预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

    用VC++ 2008 编写C语言程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 解决方法: 建工程时 建立空项目 或者在项目设置里关闭预编 ...

随机推荐

  1. 学习笔记《Java多线程编程实战指南》三

    3.1串行.并发与并行 1.串行:一件事做完接着做下一件事. 2.并发:几件事情交替进行,统筹资源. 3.并行:几件事情同时进行,齐头并进,各自运行直到结束. 多线程编程的实质就是将任务处理方式由串行 ...

  2. MFC 解决中文乱码问题

    新的编译工具默认的是unicode编码方式,许多在多字节下面显示中文的方法已经不再适用了按照道理说设置为unicode编码后应该会很好的支持中文, 但是实际情况很悲惨,显示的都是乱码. 看到网上的很多 ...

  3. Android编程-Activity

    重要的回调函数: onCreate():初始化activity要用的其他的组件(可以是其他的activity和contentprovider之类).调用setContentView(),设定本Acti ...

  4. python之路——22

    学习内容 1.初识面向对象 类:抽象的,模子 对象:具体的,根据类规范 代码精简,修改方便,属性规范2.对象 查看属性 调用方法 __dict__,增删改查,通过字典语法进行3.类名 1.实例化 2. ...

  5. 【坑】linux目录软连接的相关操作--很容易误操作

    写一下文档,记录自己工作中的重大事故,警醒自己以后别犯错. 1)目录不能进行硬连接,只能进行软连接,也就是 ln命令必须加上 -s 参数,如下: [root@ALIYUN:~]#ln /srv/bak ...

  6. oracle表的基本操作

    --修改名称rename l_user_info to t_user_info --添加带有约束的表 create table t_user_menu( id number(20) primary k ...

  7. SQLFullbackup

    /* ==Scripting Parameters== Source Server Version : SQL Server 2016 (13.0.1601) Source Database Engi ...

  8. 服务调用框架DataStrom

    根据以前的命名服务,从新构建了下服务框架: 结构模式:c-center-s; 1.服务端: 服务端启动,讲自己的IP,端口注册到注册中心节点(master),然后注册自己的处理类(需要继承对应接口); ...

  9. MyPubMedID

    MyPubMedID是北京同舟云信息技术公司全新开发的新一代生物医学文献检索与分析平台. 该平台对PubMed全部内容进行重新清洗.组织.挖掘和开发,在完全消除PubMed检索歧义的同时,能够保证检索 ...

  10. 优于 swagger 的 java markdown 文档自动生成框架-01-入门使用

    设计初衷 节约时间 Java 文档一直是一个大问题. 很多项目不写文档,即使写文档,对于开发人员来说也是非常痛苦的. 不写文档的缺点自不用多少,手动写文档的缺点也显而易见: 非常浪费时间,而且会出错. ...