1. 程式人生 > 實用技巧 >Inno Setup區段之Files篇

Inno Setup區段之Files篇

簡述

定義安裝程式安裝檔案到系統中的可選檔案區段

[Files]區段

  • Source 必需 原始檔名稱

  • DestDir 必需的 檔案安裝到使用者系統的目錄

  • DestName 指定該檔案使用新的檔名安裝到使用者系統中

  • Excludes 指定要排除的格式列表

  • Attribs ; 檔案附加屬性 [readonly , hidden, system, notcontentindexed]

  • Permissions: 指定操作ACL(訪問控制權限)的附加許可權 [full, modify, readexec]

  • Flags :

  • 此引數是一組額外選項。可以通過用空格分隔它們來使用多個選項。支援以下選項:
    32bit
    當在 Source 和 DestDir 引數使用時,促使 {sys} 常量對映到 32-位系統目錄,regserver 和 regtypelib 標誌將檔案視為 32-位,以及 sharedfile 標誌更新 32-位 SharedDLLs 登錄檔鍵。這是在 32-位安裝模式時的預設行為。

    64bit
    當在 Source 和 DestDir 引數使用時,確保 {sys} 常量對映到 64-位系統目錄,regserver 和 regtypelib 標誌將檔案視 64-位,以及 sharedfile 標誌更新 64-位 SharedDLLs 登錄檔鍵。這是在 64-位安裝模式時的預設動作。

    allowunsafefiles
    禁止編譯器自動檢查不安全檔案。強烈推薦你不要使用該標誌,除非你有絕對的把握。

    comparetimestamp
    (不推薦,參見下面)
    如果安裝的檔案已經在使用者系統中存在,以及至少下列條件中的一個為 true,則告訴安裝程式進行時間戳比較:

    •現有的檔案和安裝的檔案都沒有版本資訊。
    •條目中同時使用了 ignoreversion 標誌。
    •未使用 replacesameversion 標誌,並且現有的檔案和要安裝的檔案版本號相同(用檔案的版本資訊決定)。
    如果現有的檔案的時間戳比安裝的檔案老,現有的檔案將被替換。否則,將不替換。

    如果還沒有其它方法,不推薦使用該標誌,因為其中有一個內部問題: NTFS 分割槽在 UTC (不同於 FAT 分割槽)貯存時間戳,因本地時間戳原因 -- Inno Setup 按預設工作 -- 只要使用者改變他們系統的時間區域,或轉到或使夏令時生效。這可能會導致使用者不希望替換的檔案被替換,或使用者希望替換的檔案未被替換。

    confirmoverwrite
    替換現有的檔案前總是詢問使用者確認。

    createallsubdirs
    按預設值,當編譯器包含子目錄搜尋 Source 檔名/萬用字元時,將跳過空目錄。該標誌會使這些目錄在安裝時被建立(就象在 [Dirs] 區段建立一樣)。

    必須和 recursesubdirs 組合使用。

    deleteafterinstall
    告訴安裝程式象平常一樣安裝檔案,但一旦安裝完成(或中斷)則刪除。這在提取指令碼中的 [Run] 區段指定要執行的臨時程式時有用。

    該標誌不會導致安裝期間未被替換的現有檔案被刪除。

    該標誌不能與 isreadme,regserver,regtypelib,restartreplace,sharedfile,或 uninsneveruninstall 標誌組合使用。

    dontcopy
    在正常的檔案複製階段不復制檔案到使用者系統,但會靜態編譯到安裝檔案中。該標誌是有用的,如果要處理該檔案是通過 [Code] 區段專門處理和使用提取函式 ExtractTemporaryFile 處理。

    dontverifychecksum
    防止安裝程式在提取後校驗檔案。在你想修改的已編譯到安裝程式中的檔案使用該標誌。

    必須與 nocompression 組合。

    external
    該標誌告訴 Inno Setup 不要編譯 Source 引數指定的檔案到安裝程式檔案中,改為從分佈的媒介或使用者系統中複製。參見 Source 引數的描述獲取更多資訊。

    fontisnttruetype
    如果用 FontInstall 引數的條目安裝一個非 TrueType 字型,則使用該標誌。

    gacinstall
    將檔案安裝到 .NET Global Assembly Cache 中。當與 sharedfile 結合使用時,在引用總數達到零時檔案只能被解除安裝。

    若要解除安裝檔案,解除安裝程式可使用由引數 StrongAssemblyName 指定的強程式集名稱。

    如果企圖在無 .NET Framework 存在的系統中使用該標誌,則會出現一個異常。

    ignoreversion
    不比較版本資訊;不考慮版本號替換現有的檔案。

    此標誌僅應用於應用程式專用的檔案,從不共享系統檔案。

    isreadme
    表示檔案為“自述”檔案。安裝程式中只有一個檔案可以使用該標誌。當檔案使用該標誌時,在安裝完成後詢問使用者是否想檢視自述檔案。如果選擇是,安裝程式將使用與這個檔案型別預設的程式開啟該檔案。因上,自述檔案應該總是使用如 .txt、.wri 或 .doc 副檔名。

    請注意,如果安裝程式重新啟動了使用者的電腦(安裝了一個帶 restartreplace 標誌的檔案或 [Setup] 區段的 AlwaysRestart 指令設為 yes),使用者將沒有檢視自述檔案的選項。

    nocompression
    預防編譯器嘗試壓縮檔案。在你知道壓縮沒有什麼好處的檔案(例如 JPEG 影象)上使用該標誌,可以加速編譯進度,並可以使生成的安裝程式更小。

    noencryption
    防止檔案被加密貯存。如果你已經啟用了加密(用 [Setup] 區段指令 Encryption),但想讓它可以在使用者輸入正確的密碼之前用 [Code] 區段支援函式 ExtractTemporaryFile 提取該檔案,則使用該標誌)。

    noregerror
    當與 regserver 或 regtypelib 標誌中的任一一個組合使用時,安裝程式將在註冊失敗時不顯示任何錯誤訊息。

    onlyifdestfileexists
    僅在使用者系統中已經存在相同名稱的檔案時安裝檔案。如果你的安裝程式是已經安裝的軟體的補丁,並且你希望安裝使用者沒有安裝的檔案時,該標誌可能有用。

    onlyifdoesntexist
    僅在使用者系統中不存在時安裝檔案。

    overwritereadonly
    總是覆蓋只讀檔案。如果不帶該標誌,安裝程式在遇到只讀檔案時詢問使用者是否覆蓋。

    promptifolder
    按預設值,當安裝的檔案比現有的檔案是個較老的版本(或當使用 comparetimestamp 時發現較早的時間戳)安裝程式將不替換現有的檔案(參見這個主題下面的備註區段獲取詳細資料)。當使用該標誌時,安裝程式將詢問使用者是否替換檔案,預設的回答是保留現有的檔案 。

    recursesubdirs
    告訴編譯器或安裝程式同時也搜尋 Source 目錄下子目錄中的 Source 檔名/萬用字元。

    regserver
    註冊 OLE 服務(a.k.a. ActiveX 控制元件)。使用該標誌,安裝程式將查詢和執行 DLL/OCX 的 DllRegisterServer 輸出。解除安裝程式呼叫 DllUnregisterServer。當用於與 sharedfile 結合時,DLL/OCX 只將在涉及的計數為零時取消註冊。

    在 64-位安裝模式中,檔案假定為 64-位映像,並將在 64 位程序內註冊。你可以通過指定 32bit 標誌來覆蓋它。

    更多資訊請參見在該主題下面的備註。

    regtypelib
    註冊型別庫(.tlb)。解除安裝程式將撤消型別庫註冊(除非指定了 uninsneveruninstall 標誌)。與 regserver 標誌一樣,當用於與 sharedfile 結合時,檔案只將在涉及的計數為零時取消註冊。

    在 64-位安裝模式安裝運行於x64版本的Windows時,型別庫將按 64-位處理進行註冊。你可以通過指定 32bit 標誌忽略。

    不支援在 Windows 的 Itanium 版本的 64-位安裝模式中註冊型別庫。

    更多資訊請參見在該主題下面的備註。

    replacesameversion
    當使用該標誌,並且檔案已經在使用者系統中存在,以及它與要安裝的檔案版本號相同,安裝程式將比較檔案,如果它們的內部不同,則替換現有的檔案。

    預設動作(例如,當該標誌未使用)是不替換版本號相同的已有的檔案。

    restartreplace
    該標誌通常用於替換系統核心檔案。如果檔案預先已經存在,且發現被鎖定,以至於安裝程式不能替換,安裝程式將註冊該檔案(用 WININIT.INI 可通過使用 MoveFileEx,分別用於 Windows 和 Windows NT)在下次系統重新啟動時替換。當出現這種情況時,將在安裝完成時提示使用者重新啟動電腦。

    注意:如果使用者沒有管理許可權,則該標誌沒有作用。因此,當使用該標誌時,推薦你在 admin.的預設設定下許可權 PrivilegesRequired [Setup] 區段指令。

    setntfscompression
    指示安裝程式對檔案啟用 NTFS 壓縮(即使它沒有取代檔案)。如果它因為任何原因設定壓縮狀態失敗(例如,如果壓縮不被檔案系統支援),將不顯示錯誤資訊。

    sharedfile
    指定在多個應用程式中共享該檔案,如果沒有其他應用程式正在使用該檔案,則只需在解除安裝時刪除該檔案。使用該標誌的大多數檔案被安裝到 Windows 系統目錄,包含 .OCX、.BPL 和 .DPL 檔案。

    使用 Windows 共享檔案計數功能(位於登錄檔 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs)。這個功能是用於讓檔案在應用程式之間共享使用,不要不注意將它刪除了。每次安裝該檔案,涉及的檔案計數將增加,當使用這個檔案的應用程式解除安裝,涉及的檔案計數減少。如果計數減少到零,該檔案被刪除(會通知使用者確認,除非同時指定了 uninsnosharedfileprompt 標誌)。

    如果安裝程式被多次執行,則引用檔案的次數將超過一次。解除安裝程式將減少相同次數的引用,所以無論如何沒有引用被遺漏(假如來自它的 append 預設設定 UninstallLogMode [Setup] 區段指令不更改)。

    當該標誌被使用時,在 DestDir 引數中不指定 {syswow64};而用 {sys} 代替。在32-位安裝模式安裝中,即使 {sys} 和 {syswow64} 對映到相同的基礎目錄,路徑名稱也必須精確匹配正在使用的每個其他現有的安裝程式;否則對檔案將建立第二個引用數目,這可能導致檔案過早地被刪除。如果你需要在64-位安裝模式安裝中安裝一個共享檔案到 32-位系統目錄,可在 DestDir 引數中指定 {sys},並另外包含 32bit 標誌。

    sign
    此標誌指示編譯器在儲存它們之前對原始原始檔進行數字簽名。如果 [Setup] 區段指令 SignTool 未被設定,則忽略。

    signonce
    此標誌指示編譯器在儲存它們之前對原始原始檔進行數字簽名,但僅在檔案未簽名時才對其進行數字簽名。如果 [Setup] 區段指令 SignTool 未被設定,則忽略。

    skipifsourcedoesntexist
    該標誌指示編譯器 -- 或安裝程式,如果 external 標誌也被使用 -- 如果原始檔不存在,則靜默地跳過該項,而不是顯示一個錯誤訊息。

    solidbreak
    當固態壓縮被啟用時,該標誌指示編譯器完成當前壓縮流,並在壓縮檔案被 Source 匹配前開始一個新的壓縮。這允許安裝程式立即尋求到檔案而無需首先解壓縮任何前面的檔案。在一個大的、多元件的安裝中,如果你發現太多的時間花費在解壓縮屬於未被選上的元件檔案上可以是有用的。

    sortfilesbyextension
    該標誌指示編譯器在按路徑名排序前按副檔名進行排序,將所找到的檔案進行壓縮。如果也使用固態壓縮,這可能會降低安裝程式的大小。

    sortfilesbyname
    在按路徑名稱排序前,該標誌指示編譯器按名稱排序壓縮找到的檔案。如果也使用固態壓縮,這有可能減小安裝程式的尺寸。如果 sortfilesbyextension 也被使用,則檔案首先按副檔名排序。

    touch
    此標誌會導致安裝程式將安裝檔案的日期/時間戳設定為由 TouchDate 和 TouchTime [Setup] 區段指令指定的程式。

    如果與 external 標誌結合,此標誌沒有任何作用。

    uninsnosharedfileprompt
    當解除安裝共享檔案時,如果其引用計數為零而不是詢問使用者,則自動刪除檔案。若要發揮作用則必須結合 sharedfile 標誌。

    uninsremovereadonly
    解除安裝該檔案時,請在嘗試刪除檔案之前從檔案中移除任何只讀屬性。

    uninsrestartdelete
    當該標誌被使用,並且檔案在解除安裝時正在使用時,在系統重新啟動時,解除安裝程式將佇列檔案被刪除,並在解除安裝過程結束時詢問使用者是否要重新啟動。當解除安裝外殼擴充套件之類無法以程式設計方式停止時,這個標誌可以是有用的。注意,需要具有管理許可權,此標誌才有作用。

    uninsneveruninstall
    永遠不要刪除該檔案。此標誌在安裝任何情況下都不應刪除很常見的共享檔案(如 MFC DLL)時,非常有用。

    注意,如果該標誌結合 sharedfile 標誌,則檔案將不會在解除安裝時刪除,但仍然會引用計數適當的遞減。

    unsetntfscompression
    指示安裝程式禁用 NTFS 壓縮檔案(即使它不替換檔案)。如果它不能以任何理由(例如,如果由檔案系統不支援壓縮)設定壓縮狀態,將不顯示任何錯誤訊息。

code

	[Files]
	Source: default.exe ;  DestDir: {app}/default.exe;