[InstFiles]在Inno中打包隱藏和系統文件的頭文件
本文來自:http://www.kngstr.com
簡介:
一直以來,Inno的作者都沒有提供打包隱藏文件和系統文件的功能。
但是,如果我們做批量打包,批量封裝的時候,總會需要這樣的功能,因為我們不能保證沒有隱藏文件。
如果有這些文件,但是沒有被打包進去,相信後果大家都懂的。
這次我用ISPP功能做了這麽一個頭文件,不但可以打包隱藏文件,還能保留屬性。(支持 系統 和 隱藏)
用法:
為了讓大家用起來順手,我做了一個最簡單的用法,不過,如果你要做的包含很多文件夾,那麽請看:Example2.iss
1 ; -- Example1.iss --
2; Demonstrates use InstFiles.ish.
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
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的那個版本裏面會自帶該頭文件和示例。
文中提到的文件下載:https://files.cnblogs.com/files/chenjian/InstFiles-2012-11-13.7z
[InstFiles]在Inno中打包隱藏和系統文件的頭文件