1. 程式人生 > >[InstFiles]在Inno中打包隱藏和系統文件的頭文件

[InstFiles]在Inno中打包隱藏和系統文件的頭文件

py函數 需要 count amp target idc 文件的 測試 重新

本文來自: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限制比較多。做了很多的方案都不合我心裏的想法。

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

文中提到的文件下載:https://files.cnblogs.com/files/chenjian/InstFiles-2012-11-13.7z

[InstFiles]在Inno中打包隱藏和系統文件的頭文件