1. 程式人生 > >Inno Setup指令碼語法大全

Inno Setup指令碼語法大全

 Bruce  2年前 (2014-10-28)  11189瀏覽  0評論 來源: http://www.uol123.com/2014/10/28/inno-setup%E8%84%9A%E6%9C%AC%E8%AF%AD%E6%B3%95%E5%A4%A7%E5%85%A8.html


 是一個免費的 Windows 安裝程式製作軟體。第一次發表是在 1997 年,Inno Setup 今天在功能設定和穩定性上的競爭力可能已經超過一些商業的安裝程式製作軟體。
關鍵功能:
★ 支援現在所有正在使用的 32 位 Windows 版本: Windows 95,98,2000,Server 2003,XP,Me,NT 4.0 (不需要服務包)。 


★ 支援建立單個 EXE 格式的安裝程式,使你的程式可以很方便地在網路上發表。同時也支援磁碟延伸。
★ 標準的 Windows 2000/XP 樣式嚮導介面。
★ 定製安裝型別,例如:完整安裝,最小安裝,自定義安裝。
★ 完整的解除安裝功能。
★ 檔案安裝: 
包括完全的“壓縮”支援,bzip2 和 7-Zip LZMA 檔案壓縮。安裝程式可以比較檔案版本資訊,替換正在使用的檔案,使用共享檔案計數,註冊 DLL/OCX 和型別庫,以及安裝字型。
★ 可以在任意地方創快捷方式建,包括開始選單和桌面。 
★ 建立登錄檔和 .INI 專案。
★ 完整的 Pascal 指令碼引擎。
★ 支援 multilingualLanguagessection 安裝。

★ 支援密碼和加密安裝。
★ 後臺安裝和後臺解除安裝。 
★ 全部原始碼公開 (Borland Delphi 2.0-5.0)。

文件約定  
建立安裝程式  
建立指令碼  
段內參數  
一些常量  
公共引數  
安裝指令碼段  
[Setup] 段  
[Dirs] 段  
[Files] 段  
[Icons] 段  
[INI] 段  
[InstallDelete] 段  
[Messages] 段  
[Registry] 段  
[Run] 段  
[UninstallDelete] 段  
[UninstallRun] 段  
其它問題:  


其它注意事項  
在命令列執行編譯器  
安裝命令列引數  
文件約定  

“Windows 95/NT 4+” 
這是 Windows 95, 98, NT 4.0, 2000 以及更高版本的簡稱。 

“Windows 98/NT 4+” 
這是 Windows 98, NT 4.0, 2000 以及更高版本的簡稱。 

“Windows NT” 
無論何時提及 Windows NT,除非有其他說明,他總是包括 Windows 2000(亦即 NT 5.0)。 

等寬字型 
當你看見文件裡的等寬字型,說明他是指令碼檔案的引用。  

建立安裝程式  

安裝程式是以指令碼(script)的方式來建立的。(不要一看見“指令碼”這個術語就害怕,你只需要花上幾分鐘的時間就可以掌握它的要領!)  

該指令碼檔案的副檔名是“.iss”(意思是 Inno Setup Script)。指令碼檔案控制了安裝程式的每一個外觀介面。它指定了哪些檔案要被複制及其位置,建立什麼應用程式圖示和為它們命名等等。  

指令碼檔案通常可以用安裝編譯程式內建的編輯器來建立和編輯,完成以後寫入指令碼檔案,下一步也是最後一步是在安裝編譯器的選單裡選擇“編譯”(Compile)。建立完成以後該幹什麼呢?準備執行這個基於該指令碼的安裝程式吧!預設情況下,這個檔案被建立在指令碼檔案所在資料夾的“OUTPUT”子資料夾下。 

要了解指令碼檔案是如何工作的,執行安裝編譯器,單擊“檔案/開啟”選擇一個位於 Inno Setup 資料夾的 Samples 子資料夾下的示例指令碼檔案。(用這些示例檔案作為你自己的指令碼檔案的模板可能示非常有用處的。)  

參見  
建立指令碼  

建立指令碼  

一個 Inno Setup 指令碼是一個簡單的 ASCII 文字檔案。它的格式非常類似於 .INI 檔案,如果你有這方面的經驗你就會發現學習起來有多麼的容易。  
就象下面的示例所顯示的,指令碼檔案包括“段”(sections)和“項”(entries)。段名的兩邊始終有一對中括號“[]”,在 [Setup] 段中的每一項包括一個關鍵字和他的值,關鍵字和值用等於號“=”連線在一起。下面的這個示例說明了指令碼檔案是如何被組織的: 

[在這裡新增段名,例如 Setup]  
這是一個關鍵字=這是一個值  
這是其它的關鍵字=這是其它的值 

[在這裡新增段名,例如 Files]  
Source: “MYPROG.EXE”; DestDir: “{app}” 

你也可以在你的指令碼檔案中加上註釋(這些註釋將會被安裝編譯器忽略),方法是在每一行註釋的行首加上一個分號“;”,例如:  

; 這是一行註釋,我可以在這裡寫上提醒我的內容… 

參見  
段內參數  
一些常量  
[Setup] 段  
[Dirs] 段  
[Files] 段  
[Icons] 段  
[INI] 段  
[InstallDelete] 段  
[Messages] 段  
[Registry] 段  
[Run] 段  
[UninstallDelete] 段  
[UninstallRun] 段  

段內參數  

指令碼檔案中的所有的段,除了[Setup],都是以行位單位,每行分為若干個引數。下面是一個 [Files] 段的示例:  

[Files]  
Source: “MYPROG.EXE”; DestDir: “{app}”  
Source: “MYPROG.HLP”; DestDir: “{app}”  
Source: “README.TXT”; DestDir: “{app}”; Flags: isreadme 

每一個引數都有一個名稱,後面緊跟一個冒號,然後是它的值。除非有其它的說明,引數是可選的,如果引數沒有指定則取它們的預設值。如果一行內有多個引數則用分號將其分開 (還可以加一個空格符),他們可以按任何順序排列出來。  
引數的值多數情況下是用引號擴起來(”),但使用引號也是可選的。然而如果這個引數的值裡面的前導符號或者字尾符號是空格的話就必須加上引號了。另外需要說明的是使用內嵌的分號和引號,要插入一個引號則使用兩個連續的引號來代替。例如,下面的示例:  

“This “” contains “” embedded “” quotes”  

“””” 

安裝程式編譯器將會視為:  

This ” contains ” embedded ” quotes  

” 

一些常量  

多數的指令碼項都可以在它們的內部嵌入“常量(constants)”,它們總是被一對大括號({ })擴起來的。當安裝程式被啟動的時候,這些常量將被轉換成其真實的值,這依賴於使用者的選擇和系統配置,例如,{win} 這個常量在絕大多數的系統當中將被轉換成“C:/WINDOWS”。  

字元“{”被視為一個常量的起始標記,如果你想獲得的是它的真實字元,那麼你必須使用兩個連續的“{”字元。  

如果一個常量的後面緊跟著一個反斜槓,而此時這個常量被轉換成其真實值的結尾也是一個反斜槓時,Inno Setup 會自動的刪除一個反斜槓,這樣處理的明顯的好處是如果這個常量指向了“C:/”,{常量名}/file 就會被正確的轉換成“C:/file”而不是“C://file”。然而如果你想要防止這種事情的發生,那麼就要將反斜槓用大括號括起來,象這樣:{app}{/}.  

下面所列出的是目前已經被支援的常量。  

目錄常量  

{app} 
應用程式目錄,這是使用者在安裝嚮導的選擇安裝目錄頁裡面所選擇的。  
例如:如果你使用了 {app}/MYPROG.EXE 作為一項並且使用者選擇了“C:/MYPROG”作為應用程式的目錄,那麼安裝程式就會將它轉換成“C:/MYPROG/MYPROG.EXE”。  
{win} 
系統的 Windows 目錄。 例如:如果你使用了 {win}/MYPROG.INI 作為一項並且系統的 Windows 目錄是“C:/WINDOWS”,那麼安裝程式就會將它轉換成“C:/WINDOWS/MYPROG.INI”。  
{sys} 
系統的 Windows 系統(System)目錄(在 Windows NT/2000 下是 System32)。 例如:如果你使用了 {sys}/CTL3D32.DLL 作為一項並且系統的 Windows 系統目錄是“C:/WINDOWS/SYSTEM”,那麼安裝程式就會將它轉換成“C:/WINDOWS/SYSTEM/CTL3D32.DLL”。  
{src} 
這個資料夾指向安裝程式所在的位置。  
例如:如果你使用了 {src}/MYPROG.EXE 作為一項並且使用者是從“S:/ ”安裝的,那麼安裝程式就會將它轉換成“S:/MYPROG.EXE”。  
{sd} 
系統驅動器,它是指 Windows 被安裝到的那個驅動器,典型的是“C:”,對於 Windows NT/2000,這個常量同系統的環境變數“SystemDrive”是等效的。  
{pf} 
程式資料夾(Program Files),這個路徑是系統的 Program Files 目錄,典型的是“C:/Program Files”。  
{cf} 
公共資料夾(Common Files),這個路徑是系統的 Common Files 資料夾,典型的是“C:/Program Files/Common Files”。  
{tmp} 
臨時目錄,這個目錄並不是使用者的 TEMP 環境變數指向的目錄,而是安裝程式在啟動時在使用者的臨時目錄下建立的一個子目錄(它有一個類似於“ 
C:/WINDOWS/TEMP/IS-xxxxx.tmp”這樣的名字),在安裝程式退出時所有的檔案和子目錄將會被刪除。對於在 [Run] 段裡面要被執行且在安裝以後又不需要的程式檔案來說這個功能是非常有用的。  
{fonts} 
字型目錄,在 Windows 95/NT 4+ 下有一個專門為字型設立的目錄(通常這個目錄在 Windows 目錄下且被命名為“FONTS”),這個常量就指向這個目錄。對於 Windows NT 3.51,這個常量是和 {sys} 等效的,因為當時還沒有字型目錄。  
{dao} 
DAO 目錄,當安裝程式執行在 Windows 95/NT 4+ 上時,它被等效為 { 
cf}/Microsoft Shared/DAO,當運行於 Windows NT 3.51 時,它被等效為 { 
win}/MSAPPS/DAO.  
外殼(Shell)資料夾常量  

Inno Setup 還支援另外一套目錄常量,這就是涉及到的外殼(shell)資料夾常量,它們具有和其它的目錄常量相同的使用方法。然而,如果在指令碼的 [Setup] 段裡面放入了 MinVersion=4,3.51 這一行來表示允許支援 NT 3.51,那麼將只有 {group} 這個外殼資料夾常量能被使用,並籤只能用在 [Icons] 段。  

下面的包含了“user”的常量涉及到當前登陸的使用者私人文件(profile),而帶有“ 
common”的常量會涉及到全部使用者(All Users)的私人文件(profile)。當安裝程式執行在 Windows NT/2000 作業系統下並且使用者不具有管理員的許可權時,所有的帶有“common”的常量會強迫同帶有“user”的常量等效。  

* 標記表示帶有“common”的常量在 Windows 9x 作業系統下同帶有“user”的常量等效。  

{group}  
程式組的路徑,取決於使用者在安裝程式嚮導的“選擇程式組”頁的選擇。對於 Windows NT,這個資料夾始終被建立在所有使用者的私人文件(All Users profile),除非使用者正在安裝的這個應用程式不具有管理員的許可權,那麼在這種情況下它將被建立在使用者的私人文件中(profile).  
{sendto}  
當前使用者的“傳送”的路徑。(沒有公共的“傳送”資料夾。)  
{userappdata} & {commonappdata}  
應用程式資料(Application Data)資料夾的路徑。  
{userdesktop} & {commondesktop} *  
桌面資料夾的路徑,推薦桌面快捷方式使用 {userdesktop}.  
{userdocs} & {commondocs}  
“我的文件”資料夾的路徑(或者對於 NT 4.0,是指私人資料夾).  
{userfavorites} & {commonfavorites}  
“收藏夾”的路徑,這個常量的使用方法是需要 MinVersion 的設定至少為“4.1, 4”,目前只有 Windows 2000 支援 {commonfavorites},如果使用的是在這之前的版本的 Windows,那麼它將會被轉換成和{userfavorites} 相同的目錄。  
{userprograms} & {commonprograms} *  
在開始選單裡面的程式資料夾的路徑。  
{userstartmenu} & {commonstartmenu} *  
開始選單的定級路徑。  
{userstartup} & {commonstartup} *  
開始選單裡面的啟動資料夾的路徑。  
{usertemplates} & {commontemplates}  
模板(Templates)資料夾的路徑,目前只有 Windows 2000 支援 { 
commontemplates},如果使用的是在這之前的版本的 Windows ,它將會被轉換成和 {usertemplates} 相同的目錄。  
其他的常量  

{/}  
一個反斜槓字元,請參見本頁前面提到的關於常量 {/} 和單字元 / 在使用上有何不同的說明。  
{%NAME}  
內嵌一個環境變數,這個 NAME 是要使用的環境變數的名字。如果在使用者的系統當中指定的環境變數不存在,這個常量就會被一個空的字串所替代。  
{computername}  
安裝程式正在執行的計算機的名稱(就是“GetComputerName”函式的返回值)。  
{groupname}  
使用者在安裝程式嚮導的選擇程式組頁選擇的程式組的名稱,這個是不同於 {group} 的,它不包括路徑。  
{hwnd}  
(專門用途)傳送安裝程式背景視窗的視窗控制代碼。  
{reg:HKxx/SubkeyName,ValueName|DefaultValue}  
內嵌一個登錄檔值。  
HKxx 指定根鍵(root key),參見 [Registry] 段 文件所列出的根鍵。  
SubkeyName 指定要讀取的子鍵的名稱。  
ValueName 指定要讀取的值的名稱,要讀取一個鍵的預設值就讓 ValueName 為空。  
DefaultValue 如果指定的登錄檔值不存在或者它不是一個字串型別(REG_SZ 或者 REG_EXPAND_SZ),則嵌入這個值。  
如果你希望包括一個逗號,豎線(字元“|”)或大括號閉弧“}”在常量裡面,你必須通過“%-編碼” 形式用“%”後緊跟一個兩位的16進位制程式碼轉譯後替換原來的字元,一個逗號是“%2c”,一個豎線符是“%7c”,一個大括號閉弧是“%7d”。  
DefaultValue 可以包括常量,然而,如上所訴內嵌的常量的大括號的閉弧  
(“}”) 必須被改成“%7d”才可以。  
{srcexe} 
安裝程式的檔名全稱(包括全程路徑和檔名),例如“C:/SETUP.EXE”。  
{username}  
執行安裝程式的使用者的名稱(函式 GetUserName 的返回值)。  
公共引數  

有倆個可選的引數可以在所有的段裡面的任何項中使用,它們是:  

MinVersion  

說明:  
該項處理所需的分別最低的 Windows 版本和 Windows NT 版本. 如果將某個版本號指定為 0 那麼在該平臺上就再也不會處理這項了,版本建立編號(Build numbers)和(或)服務包級別(Service pack levels)也可以被包括在版本號當中。這個引數將會覆蓋位於 [Setup] 段當中的 MinVersion 關鍵字。  

示例:  
MinVersion: 4.0,4.0  

OnlyBelowVersion  

說明:  
基本上是和 MinVersion 相反,該項所指定的最低的 Windows 版本 和 Windows NT  
版本將不會被處理,例如:如果你指定了 4.1,5.0 並且使用者執行在 Windows 95 或 NT 4.0 下,那麼該項將會被處理,但是如果使用者執行在 Windows 98 (報告的版本資訊是 4.1)或 Windows 2000 (報告的版本資訊是 NT 5.0),則該項就不會被處理。使用“0”表示該版本號上限的限制。版本建立編號(Build numbers)和(或)服務包級別(Service pack levels) 也可以包括在版本號當中。這個引數將會覆蓋位於 [Setup] 段當中的 OnlyBelowVersion 關鍵字。  

示例:  
OnlyBelowVersion: 4.1,5.0  

其它注意事項  

安裝程式是按照段內的排列順序來處理所有的項的,[UninstallRun] 段是個例外,解除安裝時處理所有項的順序是與安裝程式相反的。  

在這個示例中:  

[INI]  
Filename: “{win}/MYPROG.INI”; Section: “InstallSettings”; Flags: uninsdeletesectionifempty  
Filename: “{win}/MYPROG.INI”; Section: “InstallSettings”; Key: “InstallPath”; String: “{app}”; Flags: uninsdeleteentry 

安裝程式首先記錄下第一項的資料 uninsdeletesectionifempty 標記到解除安裝記錄中。建立第二項的鍵,然後記錄下 uninsdeleteentry 標記的資料到解除安裝記錄中,當程式被解除安裝時,解除安裝程式將首先處理 uninsdeleteentry 標記,刪除該項,然後才是 uninsdeletesectionifempty 標記。  

如果安裝程式在使用者的系統中檢測到一個 Windows 共享版本,Windows 系統目錄是防寫的,{sys} 目錄常量將會被轉變為使用者的 Windows 目錄替代系統目錄。  
在命令列執行編譯器  

指令碼檔案也可以在命令列被安裝編譯器編譯。命令列的使用方法如下: 

compiler /cc <指令碼檔案>  
示例:  
compil16 /cc c:/isetup/sample16/sample16.iss  
compil32 /cc “c:/isetup/sample32/my script.iss”  

在上面列出的例子中,帶有空格的檔名必須用引號括起來。  
在命令列執行安裝編譯器不支援正常的程序顯示或任何錯誤訊息。如果編譯成功安裝編譯器將會返回一個退出程式碼 0,如果是 1 則表示有無效的命令列引數, 2 則表明編譯失敗。 

安裝命令列引數  

安裝程式本身接受三個不同的可選的命令列引數,這些引數能被用於系統管理員和其他程式呼叫安裝程式。  

/SP-  

在安裝程式開始時禁止“即將安裝 … ,繼續嗎?”的提示,當然,它將使 [Setup] 段的 DisableStartupPrompt 關鍵字設定為 yes 無效  

/DIR=”x:/dirname”  

替換在“選擇目標資料夾”嚮導頁顯示的預設的目錄名,必需要指定一個全程路徑名。如果 [Setup] 段的 DisableDirPage 關鍵字被設定為 yes, 那麼該命令列引數將被忽略。  

/GROUP=”group name”  

替換在“選擇程式組”嚮導頁顯示的預設的程式組名,如果 [Setup] 段的 DisableProgramGroupPage 關鍵字被設定為 yes, 那麼該命令列引數將被忽略。  



安裝指令碼段 

安裝指令碼段  
[Setup] 段  
[Dirs] 段  
[Files] 段  
[Icons] 段  
[INI] 段  
[InstallDelete] 段  
[Messages] 段  
[Registry] 段  
[Run] 段  
[UninstallDelete] 段  
[UninstallRun] 段  
其它問題:  

其它注意事項  
在命令列執行編譯器  
安裝命令列引數  


[Setup] 段  
這個段包括了安裝和解除安裝程式所使用的全域性設定,並且有些關鍵字在你建立的安裝程式中是必須要用到的。這個是 [Setup] 段的一個示例:  
[Setup] 
AppName=My Program 
AppVerName=My Program version 1.4 
DefaultDirName={pf}/My Program 
DefaultGroupName=My Program  
下面的這些關鍵字可以被放進 [Setup] 段中去: 

(粗體字 表示是必需的) 

編譯器相關  

CompressLevel  
DiskClusterSize  
DiskSize  
DiskSpanning  
DontMergeDuplicateFilesOutputBaseFilename  
OutputDir  
ReserveBytes  
SourceDir  
UseSetupLdr  
安裝程式相關 
功能關鍵字: 這些關鍵字影響到安裝程式的操作,或是儲存起來以備將來解除安裝時所用到。  

AdminPrivilegesRequired  
AllowNoIcons  
AllowRootDirectory  
AlwaysCreateUninstallIcon  
AlwaysRestart  
AlwaysUsePersonalGroup  
AppName  
AppId  
AppMutex  
AppPublisher  
AppPublisherURL  
AppSupportURL  
AppUpdatesURL  
AppVersion  
AppVerName  
ChangesAssociations  
CreateAppDir  
CreateUninstallRegKey  
DefaultDirName  
DefaultGroupName  
DirExistsWarning  
DisableAppendDir  
DisableDirPage  
DisableFinishedPage  
DisableProgramGroupPage  
DisableStartupPrompt  
EnableDirDoesntExistWarning  
ExtraDiskSpaceRequired  
InfoAfterFile  
InfoBeforeFile  
LicenseFile  
MessagesFile  
MinVersion  
OnlyBelowVersion  
Password  
Uninstallable  
UninstallDisplayIcon  
UninstallDisplayName  
UninstallFilesDir  
UninstallIconName  
UninstallLogMode  
UpdateUninstallAppName  
UsePreviousAppDir  
UsePreviousGroup  
外觀介面關鍵字:這些關鍵字決定了安裝程式的外觀樣式。  

AppCopyright  
BackColor  
BackColor2  
BackColorDirection  
BackSolid  
WindowShowCaption  
WindowStartMaximized  
WindowResizable  
WindowVisible  
WizardImageBackColor  
WizardImageFile  
廢棄的  

Bits  
DisableDirExistsWarning  
OverwriteUninstRegEntries  

[Dirs] 段  
這個段是可選的,而且通常對於大多數簡單的應用程式來書不是必需的。這個段是用來建立除使用者選擇的應用程式目錄以外的其它的附加的目錄,它是被自動建立的。這個段所建立的子目錄是可以脫離主應用程式而共同使用的目錄。當然在 [Files] 段裡面的檔案被複制到某個目錄之前你並不一定要建立它,然而在解除安裝程式的時候在 [Dirs] 和 [UninstallDelete] 段裡面沒有指定的目錄就不會被刪除。  
這是一個 [Dirs] 段的示例:  

[Dirs]  
Name: “{app}/data” 
Name: “{app}/bin”  
上面的示例演示了在安裝程式的應用程式目錄被建立之後,在應用程式的下面建立兩個子目錄。 

下面列出了支援的引數: 

Name (必需的)  

說明:  
要被建立的目錄的名稱,通常它以一個目錄常數開始。 

示例:  
Name: “{app}/MyDir”  
Flags  

說明:  
“標記”,這個引數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支援的選項: 

deleteafterinstall 
告訴安裝程式象平常一樣建立目錄,但是當安裝程式結束(或被中止)之後這個目錄是空的情況下將這個目錄刪除。如果釋放指令碼的 [Run] 段所執行的程式所需要的臨時的資料時這個選項是很有用的。 

uninsalwaysuninstall 
告訴解除安裝程式試圖刪除這個目錄而不管它是不是空的。通常解除安裝程式只會嘗試刪除在安裝之前不存在的目錄。  

uninsneveruninstall 
告訴解除安裝程式不要去刪除這個目錄。在預設情況下,在 [Dirs] 段裡面指定的目錄如果是空的解除安裝程式就會嘗試將其刪除。  

示例:  
Flags: uninsneveruninstall  
公共引數 

[Files] 段  
這個段是可選的,但對於大多數安裝程式來說是必不可少的。在這裡定義了安裝程式需要複製到使用者的系統當中的全部檔案。  
在安裝期間,解除安裝程式和資料被自動的複製到應用程式的目錄當中去,因此你不必手工的將它們新增到 [Files] 段。  

這是一個 [Files] 段的示例:  

[Files]  
Source: “CTL3DV2.DLL”; DestDir: “{sys}”; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall  
Source: “MYPROG.EXE”; DestDir: “{app}”  
Source: “MYPROG.HLP”; DestDir: “{app}”  
Source: “README.TXT”; DestDir: “{app}”; Flags: isreadme  
下面列出了支援的引數:  

Source (必需的)  

說明: 
“原始檔”的名稱,如果沒有提供全程路徑時編譯器會根據安裝程式的源目錄的路徑預先設定號路徑。 

允許萬用字元,根據萬用字元可以在一項裡面簡單的指定一組檔案。當使用了萬用字元的時候,所有匹配的檔案使用相同的可選項。 

當標記(flag) external 被指定的時候,Source 必須是一個在釋出介質或使用者的系統中已經存在的檔案(或帶有萬用字元)的全程路徑。(例如“{src}/license.ini”). 

示例: 
Source: “MYPROG.EXE”  
DestDir (必需的)  

說明: 
這個是檔案將要被安裝到使用者的系統當中去的目錄。它幾乎總是以一個目錄常量開始的。如果指定的路徑不存在於使用者的系統中,它將會被自動的建立。 

示例:  
DestDir: “{app}”  
DestName  

說明:  
這個常數為將要安裝到使用者的系統中的檔案指定一個新的名字。在預設的情況下,安裝程式使用的是同 Source 引數一樣的檔名,因此在多數情況下不需要指定該引數。  

示例:  
DestName: “MYPROG2.EXE”  
CopyMode  

預設:  
normal  

說明:  
“複製模式”,指定檔案複製的規則,必須是下列規則之一。 

normal 
這是最常使用的選項。如果檔案已經存在於使用者的系統當中並且比要複製的檔案的版本更新時(由檔案的版本資訊決定),安裝程式將會向用戶提出詢問是否要替換掉已經存在的檔案。如果已經存在的檔案不包含檔案的版本資訊,它將會被覆蓋而不會向用戶詢問。 

參見這個標題下面的注意中關於版本檢查的重要說明。 

onlyifdoesntexist 
只有當用戶的系統中的檔案不存在時才複製檔案。 

alwaysoverwrite 
總是覆蓋已經存在的檔案,甚至如果已經存在的檔案比被安裝的檔案的版本更新的情況下也是如此。對於共享的系統檔案永遠也不要這樣做!  

alwaysskipifsameorolder  
類似於 normal, 不同之處是如果遇到已經存在的檔案不會向用戶提出詢問。當這個模式被使用時,更新的一經存在的檔案時從來不會被替換的。  

示例:  
CopyMode: normal  
Attribs  

說明: 
為檔案指定附加的“屬性”,它可以包括一個或多個屬性,它們是:readonly, hidden, system. 如果沒有指定這個引數,安裝程式不會給檔案指派任何特殊的屬性。 

示例:  
Attribs: hidden system  
FontInstall  

說明: 
告訴安裝程式需要被安裝的檔案是一個字型檔案,該值是被儲存到登錄檔或 WIN.INI 檔案中的字型名稱,這個名稱必須嚴格地和在資源管理器中雙擊字型檔案看到的名稱相對應。注意,安裝程式會自動的在字型名稱的末尾加上“(TrueType)”。 

如果這個字型檔案不是一個 TrueType 字型,你必須在 Flags 引數中指定 fontisnttruetype 標記。 

建議在安裝字型到 {fonts} 目錄的時候使用複製模式引數 onlyifdoesntexist 和標記(flag)引數 uninsneveruninstall. 

示例:  
Source: “OZHANDIN.TTF”; DestDir: “{fonts}”; FontInstall: “Oz Handicraft BT”; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall  
Flags  

說明:  
“標記”,這個引數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支援的選項: 

comparetimestampalso 
(專門用途) 如果要被複制到使用者系統的檔案已經存在於使用者的系統當中並且它們具有相同的版本資訊,告訴安裝程式進行時間戳(檔案的日期時間屬性)的比較。 在正常情況下安裝程式不會覆蓋已經存在的檔案,但是當使用了這個標記的時候, 如果已存在的檔案的時間戳比它的版本資訊還要舊,安裝程式在安裝檔案時就會覆蓋它。當複製模式不是 normal 或 alwaysskipifsameorolder 這兩者之一時該標記不起作用。 

confirmoverwrite 
當檔案已經存在每個檔案在複製之前始終向用戶提出詢問。 

deleteafterinstall 
告訴安裝程式象平常一樣複製檔案,但是當安裝程式結束(或被中止)之後將這個檔案刪除。如果釋放指令碼的 [Run] 段所執行的程式所需要的臨時的資料時這個選項是很有用的。 

此標記不能和下列標記在一起組合使用: isreadme, regserver, regtypelib, restartreplace, sharedfile, uninsneveruninstall. 

external 
此標記告訴 Inno Setup 不要將由 Source 引數指定的檔案編譯進安裝程式檔案中,在複製檔案的時候由釋出介質或使用者的系統中已經存在檔案代替。要獲得更多詳細的資訊請參見 Source 引數的說明。 

fontisnttruetype 
如果 FontInstall 引數指定的是一個 非 TrueType 字型則使用此標記。 

isreadme 
該檔案是“自述(README)”檔案,安裝程式中只有一個檔案能夠使用此引數。當有一個檔案使用了這個引數時,使用者將被詢問是否願意在安裝程式結束時檢視自述檔案,如果選擇了是,安裝程式將會根據檔案的型別用預設的程式開啟這個檔案,基於這個原因,自述檔案應該具有象 .txt, .wri 或 .doc. 這樣的副檔名。 

注意如果安裝程式要重新啟動使用者的計算機(比如安裝了一個帶有 restartreplace 引數的檔案或在 [Setup] 段中的 AlwaysRestart  
關鍵字的值為 yes),安裝程式就不會向用戶詢問是否要檢視自述檔案。 

overwritereadonly 
始終覆蓋一個只讀 (read-only) 檔案,如果沒有這個引數,當一個已存在的只讀檔案要被覆蓋時安裝程式將會詢問使用者。 

regserver 
註冊 OLE 伺服器 (或稱作 ActiveX 控制元件)。如果設定了此標記,安裝程式將查詢並執行 DLL/OCX 的 DllRegisterServer 輸出,解除安裝程式呼叫 DllUnregisterServer. 當結合 sharedfile 標記一起使用,只有參照技術器的值歸零時 DLL/OCX 才可能百取消登記 (unregistered).  

要獲得更多的詳細資訊請參見此標題最後的 注意。 

regtypelib 
註冊型別庫 (.tlb). 解除安裝程式將會取消註冊型別庫 (除非指定了 uninsneveruninstall 標記). 就像 regserver 標記那樣,如果結合 sharedfile 標記一起使用,這個檔案只有參照計數器的值歸零時才可能被解除安裝。 

要獲得更多的詳細資訊請參見此標題最後的 注意。 

restartreplace 
此標記通常用於替換系統核心檔案。如果檔案已經預先存在並發現它已經被鎖定結果導致安裝程式無法替換該檔案,安裝程式就會註冊此檔案(對於 Windows 和 Windows NT 分別使用 WININIT.INI 和函式 MoveFileEx)在下次啟動系統時被替換。當遇到這種情況,在安裝過程結束時使用者將被提示重新啟動計算機。 

要保持 Windows95/98 和 3.1 的相容性,使用了此標記的項不應該使用長檔名,只能支援“8.3”格式的檔名。(Windows NT 和 2000 則沒有此限制。)  

重要提示:在 Windows NT/2000 下只有當用戶具有管理員許可權時使用 restartreplace 標記才可以成功的替換使用中的檔案。如果使用者沒有管理員許可權,將會顯示如下的資訊:“RestartReplace failed: MoveFileEx failed; code 5.”,因此,當使用 restartreplace 標記時強烈建議讓你的安裝程式需要管理員許可權,在 [Setup] 段裡面設定 “AdminPrivilegesRequired=1″。 

sharedfile 
(僅 Windows 95/NT 4+) 使用 Windows 的共享檔案計數功能 (位於登錄檔的 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/SharedDLLs). 這樣會使應用程式之間能夠共享一個檔案,不用擔心在不注意的情況下會刪除檔案。在每次安裝共享檔案的時候,與這個檔案相對應的“參照計數器”的值就會加一,而每次應用程式被解除安裝的時候,參照計數器的值就會減一,如果參照計數器的值歸零的時候,該共享檔案就會被刪除(在使用者確認的情況下)。