[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的那個版本里面會自帶該頭文件和示例。

 

 

相關文章
相關標籤/搜索