使 用 筆 記
一、Inno Setup 是什麼?
Inno Setup 是一個免費的 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)。
二、文檔約定
Windows 98/NT 4+ 這是「Windows 98,2000,XP,NT 4.0,Me 以及更高版本」的簡寫。
Windows NT 只要是 Windows NT 就能夠,它包括 Windows 2000 和 XP (就是 NT 5),除非另外說明。
等寬文本 當你在幫助中看到等寬文本,它表示腳本在中輸入的引用的文字。
第二部分 怎麼使用
一、建立安裝程序
安裝程序用編譯腳本的方式建立,腳本其實就是一個相似 .INI 文件格式的 ASCII 碼文本文件。 (它不象你想象的那麼複雜!)
腳本用一個「.iss」 (表示 Inno Setup Script) 的擴展名。腳本控制着安裝程序的全部方面。由它指定哪些文件將被安裝到什麼地方,在哪裏建立快捷方式,且被命名爲何。
腳本文件通常能夠用安裝程序編譯器程序內置的編輯器進行編輯。在你編寫完腳本後,下一個最終步驟就是選擇安裝程序編譯器中的「編譯」。建立完成後,就能夠運行根據你腳本編譯的安裝程序了。按默認,這個安裝程序建立在包含腳本文件目錄下的名爲「輸出」目錄中。
若是你想看看它是怎樣工做的,啓動安裝程序編譯器,單擊「文件 | 打開」,並選擇位於 Inno Setup 安裝目錄下的 Samples 子目錄中的一個腳本文件。(你也能夠將這些示例腳本做爲你本身編寫腳本的模板。)
二、腳本格式概述
Inno Setup 準備了一些段。每一個段控制一個不一樣方面的安裝程序部分。每一個段用包含在括號 [] 中的段名開始,每一個段裏面是一些相關的條目。
其中有兩種不能類型的段: 有些就象 [Setup] 段,條目包含指示名和值 (格式爲 Directive=Value),還有一些就象 [Files] 段,條目被參數分隔。
這裏是一個例子:
[Setup]
AppName=My Program
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
注意,在腳本中指定多個相同名字的段是合法的。
你能夠經過在行起始位置加個分號「;」在腳本中寫入「註釋」 (編譯時被編譯時忽略)。例如:
; 這是一條註釋,放在這裏只是要提醒我本身...
支持 A C-like #include 指示,從個別文件放入行到 #include 指示位置的腳本。語法是:
#include "filename.txt"
若是文件名中未提供完整的路徑,編譯將在包含 #include 指示的同一目錄中查找。文件名用「compiler:」做爲前綴的場合中,在編譯器目錄中查找文件。
三、段中參數
全部腳本中的段,除 [Setup]、[Messages]、[CustomMessages] 和 [LangOptions] 段,包含的行中可有多個各自的參數。下列是 [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
若是你但願參數值是一個單個雙引號字符,用四個雙引號字符: """"。外面的兩個用於包含引用的字符;內部兩個寫入單個的雙引號字符。
四、常量
腳本中的項目大部分能夠嵌入常量。這些預約義的字符被包含在括弧 { } 中。安裝程序或卸載程序會根據用戶選擇和系統配置將這些常量翻譯爲文字值。例如,{win} 在大部分系統中會被翻譯爲「C:\WINDOWS」。
字符「{」視做爲常量開始。若是你想將它做爲實際字符使用,你必須使用兩個連續的「{」字符。(對於「}」則不須要。)
當 在常量後面直接跟隨一個反斜槓時,若是常量的值末端已經包含了一個反斜槓號,安裝程序或卸載程序將自動刪除該反斜槓號。 所以,若是一個特殊常量值是「C:\」,{constantname}\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 目錄 (在 NT 平臺上是 System32)。
例如: 若是你在條目中使用了 {sys}\CTL3D32.DLL,且系統的 Windows System 目錄是「C:\WINDOWS\SYSTEM」,安裝程序或卸載程序將它傳送到「C:\WINDOWS\SYSTEM\CTL3D32.DLL」。
{src}
安裝程序文件所在目錄。
例如: 你在條目中使用了 {src}\MYPROG.EXE,且用戶正在從「S:\」進行安裝,安裝程序將它傳送到「S:\MYPROG.EXE」。
{sd}
Windows 系統所在的驅動器。通常來講是「C:」。在 Windows NT 平臺,這個目錄常量等同於 SystemDrive 環境變量。
{pf}
程序文件位置。系統的 Program Files 目錄的路徑,通常來講是「C:\Program Files」。
{cf}
公共文件目錄。系統的 Common Files 目錄路徑,通常來講是「C:\Program Files\Common Files」。
{tmp}
用 於安裝程序或卸載程序的臨時目錄。這不是用戶的 TEMP 環境變量值。它是在安裝程序啓動後在用戶臨時目錄中建立的子目錄 (象名爲「C:\WINDOWS\TEMP\IS-xxxxx.tmp」)。目錄中的全部文件和子目錄在安裝程序或卸載程序退出時刪除。在安裝時,這主要 用於提取在 [Run] 段運行、但安裝後再也不須要的文件。
{fonts}
字體目錄。一般是在 Windows 下面的名字「FONTS」的目錄。
{dao}
DAO 目錄,等同於 {cf}\Microsoft Shared\DAO。
外殼文件夾常量
Inno Setup 支持其它目錄常量設置,做爲外殼文件夾常量引用。它們能夠與其它目錄常量相同方法使用。
下面的「user」常量引用到當前登陸的用戶配置文件,「common」常量引用到全部用戶配置文件。
除非有另外的註釋,外殼文件夾常量工做於 Inno Setup 支持的全部 Windows 版本,包括 Windows 95 和 NT 4.0。
* = 若是登陸的用戶缺乏管理員權限,或操做系統是 Windwos 95/98/Me,「common」結構映射到「user」結構。
{group}
開始菜單文件夾路徑,由用戶在安裝程序的選擇開始菜單文件夾嚮導頁中選定。在 Windows NT/2000/XP,這個文件夾老是建立在全部用戶配置文件下,除非非用戶安裝程序的用戶沒有管理員權限,這種狀況下它將建立在用戶配置文件下。
{localappdata}
本地應用程序數據文件夾。
{sendto}
當前用戶的 Send To 文件夾路徑。(這裏不是指公共 Send To 文件夾。)
{userappdata} 和 {commonappdata}
應用程序數據文件夾路徑。
{userdesktop} 和 {commondesktop} *
桌面文件夾路徑。
{userdocs} 和 {commondocs}
個人文檔 (My Documents) 文件夾路徑 (在 NT 4.0,私人文件夾)。
{userfavorites} 和 {commonfavorites} *
收 藏夾文件夾路徑。這些常量設置必須 至少「4.1, 4」 MinVersion 設置。只在 Windows 2000 和更高版本支持 {commonfavorites};若是在先前的 Windows 版本中使用,它將翻譯爲等同於 {userfavorites} 目錄。
{userprograms} 和 {commonprograms} *
開始菜單中程序文件夾路徑。
{userstartmenu} 和 {commonstartmenu} *
開始菜單頂層路徑。
{userstartup} 和 {commonstartup} *
開始菜單啓動文件夾路徑。
{usertemplates} 和 {commontemplates} *
模板文件夾路徑。僅在 Windows 2000 和更高版本支持 {commontemplates},若是使用的是先前的 Windows 版本,它將被翻譯爲等同於 {usertemplates} 目錄。
其它常量
{\}
反斜槓字符。查閱本頁頂部的註釋獲取使用 {\} 和只使用一個 \ 字符之間的差別。
{%NAME|DefaultValue}
嵌入一個環境變量值。
★ NAME 用於指定要使用的環境變量的名字。
★ DefaultValue 肯定若是指定的變量在用戶系統中不存在時置入的字符串。
★ 若是你想在常量內部包含一個逗號、豎條 (「|」),或括弧後半部 (「}」),你必須經過「%-encoding.」先用一個「%」字符而後跟隨它的兩上數字的十六進制代碼替換,從而避開它。逗號是「%2c」,豎條是 「%7c」括弧後半部是「%7d」。若是你想實際使用「%」,使用「%25」。
★ NAME 和 DefaultValue 能夠包含常量。注意,你不須要將常量中的括弧替換成上面所說的字符;上面所說的括弧後半部只在使用於其它地方時須要替換。
示例:
{%COMSPEC}
{%PROMPT|$P$G}
{cmd}
系 統標準命令解釋器的完整路徑名。在 Windows NT/2000/XP,是 Windows\System32\cmd.exe。在 Windows 95/98/Me,是 Windows\COMMAND.COM。注意當展開這個常量時 COMSPEC 環境變量不使用。
{computername}
正在運行安裝程序或卸載程序的電腦名 (等同於由 GetComputerName 函數返回的值)。
{drive:Path}
從指定的路徑中提取並返回驅動器卷標和冒號 (例如「C:」)在 UNC 路徑的場合中,它返回服務器和共享名 (例如「\\SERVER\SHARE」)。
★ Path 指定路徑。
★ 若是你想在常量內部包含一個逗號、豎條 (「|」),或括弧後半部 (「}」),你必須經過「%-encoding.」先用一個「%」字符而後跟隨它的兩上數字的十六進制代碼替換,從而避開它。逗號是「%2c」,豎條是 「%7c」括弧後半部是「%7d」。若是你想實際使用「%」,使用「%25」。
★ 能夠包含常量。注意,你不須要將常量中的括弧替換成上面所說的字符;上面所說的括弧後半部只在使用於其它地方時須要替換。
示例:
{drive:{src}}
{drive:c:\path\file}
{drive:\\server\share\path\file}
{groupname}
用戶在安裝程序嚮導頁的選擇開始菜單文件夾中選定的文件夾名。它不一樣於 {group},只有名字,不包含路徑。
{hwnd}
(特殊用途) 轉換爲安裝程序的背景窗口句柄。
{wizardhwnd}
(特殊用途) 轉換爲安裝程序的嚮導窗口句柄。若是嚮導窗口句柄在翻譯完成時不能用,這個句柄設置爲「0」。
{ini:Filename,Section,Key|DefaultValue}
從 .INI 文件插入一個值。
★ Filename 指定要讀取的 .INI 文件的名字。
★ Section 指定讀取的段名。
★ Key 指定讀取的鍵名。
★ DefaultValue 肯定若是指定的鍵不存在時要插入的字符。
★ 若是你想在常量內部包含一個逗號、豎條 (「|」),或括弧後半部 (「}」),你必須經過「%-encoding.」先用一個「%」字符而後跟隨它的兩上數字的十六進制代碼替換,從而避開它。逗號是「%2c」,豎條是 「%7c」括弧後半部是「%7d」。若是你想實際使用「%」,使用「%25」。
★ Filename,Section 和 Key 能夠包含常量。注意,你不須要將常量中的括弧替換成上面所說的字符;上面所說的括弧後半部只在使用於其它地方時須要替換。
示例:
{ini:{win}\MyProg.ini,Settings,Path|{pf}\My Program}
{language}
選定語言的內部名字。查閱 [Languages] 段幫助文檔獲取更多信息。
{cm:MessageName}
{cm:MessageName,Arguments}
根據活動語言嵌入一個自定義消息值。
★ MessageName 用於指定要讀取的自定義消息名。查閱 [CustomMessages] 段幫助文檔獲取更多信息。
★ Arguments 可隨意在消息值中指定逗號分隔的聲明列表。
★ 若是你想在常量內部包含一個逗號,垂直條 (「|」),或括號 (「}」),你必須使用「%-encoding.」避開它,用「%」字符,後面跟隨它的兩位數十六進制代碼替換。逗號是「%2c」,垂直條是「%7c」, 括號是「%7d」,若是你想包含一個實際的「%」字符,用「%25」。
★ 每一個 Arguments 中的聲明能夠包含常量。注意,你不須要避開上面描述的常量中的括號,只有在別處使用這種括號時須要避開。
示例:
{cm:LaunchProgram,Inno Setup}
若是活動語言是簡體中文,上面的示例被翻譯爲「運行 Inno Setup」。
{reg:HKxx\SubkeyName,ValueName|DefaultValue}
插入一個註冊表值。
★ HKxx 指定註冊表根鍵;查閱 [Registry] 段幫助文檔獲取可用根鍵列表。
★ SubkeyName 指定要讀取的子鍵名。
★ ValueName 指定要讀取的值名;若是你想讀取鍵的「默認」值,將 ValueName 留空。
★ DefaultValue 肯定在指定的註冊表值不存在,或不是一個字符串類型的值 (REG_SZ 或 REG_EXPAND_SZ) 時要插入的字符。
★ 若是你想在常量內部包含一個逗號、豎條 (「|」),或括弧後半部 (「}」),你必須經過「%-encoding.」先用一個「%」字符而後跟隨它的兩上數字的十六進制代碼替換,從而避開它。逗號是「%2c」,豎條是 「%7c」括弧後半部是「%7d」。若是你想實際使用「%」,使用「%25」。
★ SubkeyName,ValueName 和 DefaultValue 能夠包含常量。注意,你不須要將常量中的括弧替換成上面所說的字符;上面所說的括弧後半部只在使用於其它地方時須要替換。
示例:
{reg:HKLM\Software\My Program,Path|{pf}\My Program}
{param:ParamName|DefaultValue}
插入一個命令行參數值。
★ ParamName 指定要讀取的命令行參數名。
★ DefaultValue 肯定若是指定的命令行參數不存在,或它的值不能肯定時要插入的字符。
★ 若是你想在常量內部包含一個逗號、豎條 (「|」),或括弧後半部 (「}」),你必須經過「%-encoding.」先用一個「%」字符而後跟隨它的兩上數字的十六進制代碼替換,從而避開它。逗號是「%2c」,豎條是 「%7c」括弧後半部是「%7d」。若是你想實際使用「%」,使用「%25」。
★ ParamName 和 DefaultValue 能夠包含常量。注意,你不須要將常量中的括弧替換成上面所說的字符;上面所說的括弧後半部只在使用於其它地方時須要替換。
示例:
{param:Path|{pf}\My Program}
若是指定命令行 /Path="c:\My Program",上面的例子翻譯爲 c:\My Program。
{srcexe}
安裝程序文件的完整路徑名,例如「C:\SETUP.EXE」。
{uninstallexe}
由 安裝程序提取的卸載程序的完整路徑名,例如「C:\Program Files\My Program\unins000.exe」。這個常量通常用於在 [Icons] 段條目建立一個卸載圖標。它只在 Uninstallable 設爲 yes (默認設置) 時有效。0
{sysuserinfoname}
{sysuserinfoorg}
Windows 已許可的名字和組織,這個信息從註冊表中讀取。
{userinfoname}
{userinfoorg}
{userinfoserial}
用戶在用戶信息嚮導頁 (能夠經過 UserInfoPage 指示來啓用) 中分別輸入的名字,組織和序列號。通常來講,這些常量用於在 [Registry] 或 [INI] 條目中保存它們之後要使用的值。
{username}
正在運行安裝程序或卸載程序的用戶的名字 (也能夠用 GetUserName 函數返回)。
五、公共參數
有三個可選的被全部段條目支持的參數,它們是:
Languages
描述:
一個用空格分隔的語言名列表,告訴安裝程序條目屬於哪一種語言。若是最終用戶從列表中選擇了一個語言,該條目就執行(例如: 安裝文件)。
不帶 Languages 參數的條目老是安裝,除非其它參數中有限制。
示例:
Languages: en nl
除用空格將它們隔開外,你也可使用 boolean 表達式。查閱組件和任務參數獲取 boolean 表達式的示例。
MinVersion
描述:
指定條目要進行處理的最小 Windows 版本 Windows NT 版本。若是你在版本中的一個使用「0」,那麼條目將不在平臺中進行處理。構建號和/或安全服務包級別可能包含在版本號中。這將忽略任何在腳本 [Setup] 段中的 MinVersion 指示。
不帶 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」表示不受版本上限。 構建號和/或安全服務包級別可能包含在版本號中。這將忽略任何在腳本 [Setup] 段中的 MinVersion 指示。
不帶 OnlyBelowVersion 參數的條目老是安裝,除非其它參數中有限制。
示例:
OnlyBelowVersion: 4.1,5.0
六、組件和任務參數
這裏有兩個可選的參數,被除 [Types]、[Components] 和 [Tasks] 段之外全部其它段中的條目支持。它們是:
Components
描述:
用空格分隔的組件名列表,告訴安裝程序條目屬於哪一個組件。若是最終用戶從列表中選擇了一個組件,那麼該條目就進行處理 (例如: 安裝文件)。
不帶組件參數的條目老是安裝,除非其它參數對其有限制。
示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Components: main
Source: "MYPROG.HLP"; DestDir: "{app}"; Components: help
Source: "README.TXT"; DestDir: "{app}"
Tasks
描述:
用空格分隔的任務名列表,告訴安裝程序條目屬於哪一個任務。若是最終用戶從列表中選擇了一個任務,那麼該條目就進行處理 (例如: 安裝文件)。
不帶任務參數的條目老是安裝,除非其它參數對其有限制。
「不建立任何快捷方式」選項框不控制 [Icons] 帶任務參數的條目 (它們有本身的選項框)。所以,若是你已經定義了帶任務參數的快捷方式,安裝程序將改變「不建立任何快捷方式」的文字到「不建立開始菜單文件夾」。
示例:
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"; Components: main; Tasks: startmenu
Name: "{group}\My Program Help"; Filename: "{app}\MyProg.hlp"; Components: help;
Tasks: startmenu
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; Components: main; Tasks: desktopicon
除用空格分隔外,你也可使用 boolean 表達式做爲組件和任務參數。支持包含 not、and 和 or 操做。例如:
[Components]
Name: a; Description: a
Name: b; Description: b
[Tasks]
Name: p; Description: a or b; Components: a or b
Name: q; Description: a and b; Components: a and b
Name: r; Description: not a or b; Components: not a or b
Name: s; Description: not (a or b); Components: not (a or b)
Name: t; Description: a or b - old style; Components: a b
七、安裝腳本段
[Setup] 段
這個段包含用於安裝程序和卸載程序的全局設置。某些提示對於你建立的任何安裝程序都是必需的。這是 [Setup] 段的一個示例:
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
下列指示能夠放置到 [Setup] 段中:
(粗體爲必需項)
編譯器相關
★ Compression
★ DiskClusterSize
★ DiskSliceSize
★ DiskSpanning
★ Encryption
★ InternalCompressLevel
★ MergeDuplicateFiles
★ OutputBaseFilename
★ OutputDir
★ OutputManifestFile
★ ReserveBytes
★ SlicesPerDisk
★ SolidCompression
★ SourceDir
★ UseSetupLdr
★ VersionInfoCompany
★ VersionInfoDescription
★ VersionInfoTextVersion
★ VersionInfoVersion
安裝程序相關
功能:這些指示影響安裝程序的操做,或保存和被卸載程序使用。
★ AllowCancelDuringInstall
★ AllowNoIcons
★ AllowRootDirectory
★ AllowUNCPath
★ AlwaysRestart
★ AlwaysShowComponentsList
★ AlwaysShowDirOnReadyPage
★ AlwaysShowGroupOnReadyPage
★ AlwaysUsePersonalGroup
★ AppendDefaultDirName
★ AppendDefaultGroupName
★ AppComments
★ AppContact
★ AppId
★ AppmodifyPath
★ AppMutex
★ AppName
★ AppPublisher
★ AppPublisherURL
★ AppReadmeFile
★ AppSupportURL
★ AppupdatesURL
★ AppVersion
★ AppVerName
★ ChangesAssociations
★ ChangesEnvironment
★ createAppDir
★ createUninstallRegKey
★ DefaultDirName
★ DefaultGroupName
★ DefaultUserInfoName
★ DefaultUserInfoOrg
★ DefaultUserInfoSerial
★ DirExistsWarning
★ DisableDirPage
★ DisableFinishedPage
★ DisableProgramGroupPage
★ DisableReadyMemo
★ DisableReadyPage
★ DisableStartupPrompt
★ EnableDirDoesntExistWarning
★ ExtraDiskSpaceRequired
★ InfoAfterFile
★ InfoBeforeFile
★ LanguageDetectionMethod
★ LicenseFile
★ MinVersion
★ OnlyBelowVersion
★ Password
★ PrivilegesRequired
★ RestartIfNeededByRun
★ ShowLanguageDialog
★ TimeStampRounding
★ TimeStampsInUTC
★ Uninstallable
★ UninstallDisplayIcon
★ UninstallDisplayName
★ UninstallFilesDir
★ UninstallLogMode
★ UninstallRestartComputer
★ updateUninstallLogAppName
★ UsePreviousAppDir
★ UsePreviousGroup
★ UsePreviousSetupType
★ UsePreviousTasks
★ UsePreviousUserInfo
★ UserInfoPage
修飾:這些指示只用於安裝程序的顯示目的。
★ AppCopyright
★ BackColor
★ BackColor2
★ BackColorDirection
★ BackSolid
★ FlatComponentsList
★ SetupIconFile
★ ShowComponentSizes
★ ShowTasksTreeLines
★ UninstallStyle
★ WindowShowCaption
★ WindowStartMaximized
★ WindowResizable
★ WindowVisible
★ WizardImageBackColor
★ WizardImageFile
★ WizardImageStretch
★ WizardSmallImageFile
已廢棄
★ AdminPrivilegesRequired
★ AlwayscreateUninstallIcon
★ DisableAppendDir
★ DontMergeDuplicateFiles
★ MessagesFile
★ UninstallIconFile
★ UninstallIconName
★ UninstallStyle
★ WizardSmallImageBackColor
★ WizardStyle
[Types] 段
這個段是可選的。它用來定義安裝程序嚮導在選擇組件面時可供選擇的全部安裝類型。若是你在 [Components] 段定義了組件,但沒有定義類型,在編譯時將建立一個默認的安裝類型設置。若是你正在使用默認 (簡體中文) 消息文件,這些類型等同於下面示例中的類型。
這裏是一個 [Types] 段的示例:
[Types]
Name: "full"; Description: "徹底安裝"
Name: "compact"; Description: "簡潔安裝"
Name: "custom"; Description: "自定義安裝"; Flags: iscustom
下列是所支持的參數列表:
Name (必需)
描述:
類型的內部名字。用於定義 [Components] 段中組件參數,告訴安裝程序組件屬於哪一個類型。
示例:
Name: "full"
Description (必需)
描述:
類型的描述,能夠包含常量。這個描述在安裝期間顯示。
示例:
Description: "徹底安裝"
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
iscustom
告訴安裝程序這個類型是自定義類型。只在最終用戶在安裝期間手動改變了組件選擇,安裝程序就將安裝類型設置爲自定義類型。請注意,若是你未定義自定義類型,安裝程序將只容許用戶選擇一個安裝類型,而且不能手動選擇/取消選擇組件。
示例:
Flags: iscustom
[Components] 段
這個段是可選的。它定義安裝程序嚮導的選擇組件頁中顯示的全部組件,以便於用戶定製安裝類型。
光用它一個組件不會作任何事情: 它須要「連接」到其它安裝條目。請查閱組件和任務參數。
這裏是一個 [Components] 段的示例:
[Components]
Name: "main"; Description: "主文件"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "幫助文件"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "簡體中文"; Types: full
上面的示例生成四種組件: 「main」組件在最終用戶選擇一個名爲「full」和「compact」的類型時都將安裝。帶有兩個子組件的「help」組件類型僅在最終用戶選擇「full」類型時安裝。
下列是所支持的參數列表:
Name (必需)
描述:
組件的內部名字。
在組件名字中的 \ 或 / 字符合計數是調用組件的層次。任何在層次 1 或更高層次的組件是子組件。在子組件前列出的小於子組件一個層次的組件是上級組件。其它有相同上級組件的組件之間是同級組件。
若是上級組件未選定,則不能選定一個它的子組件。若是全部的子組件均未選定,則上級組件也不能選定,除非組件參數引用上級組件或上級組件包含 checkablealone 標記。
若是同級組件已經標有 exclusive 標記,那麼它們之中只有一個可選。
示例:
Name: "help"
Description (必需)
描述:
組件的描述,能夠包含常量。這個描述用於在安裝期間顯示給最終用戶參考。
示例:
Description: "幫助文件"
Types
描述:
用空格隔開所屬組件的類型列表。若是最終用戶從這個列表中選擇了一個類型,這個組件將被安裝。
若是未使用 fixed 標記 (看下面),這個列表中的任何自定義類型 (使用 iscustom 標記的類型) 均被安裝程序忽略。
示例:
Types: full compact
ExtraDiskSpaceRequired
描述:
這個組件所須要的額外磁盤空間,相似於 [Setup] 段中的 ExtraDiskSpaceRequired。
示例:
ExtraDiskSpaceRequired: 0
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
checkablealone
指定當一個組件的子組件選中時,該組件是否能夠選中。按默認,若是沒有組件參數直接引用到該組件,未選中全部子組件將會使該組件變成未選中狀態。
dontinheritcheck
指定當該組件的上級被選中時,該組件應該不自動變成已選中狀態。這對頂層的組件不影響,且不能與 exclusive 標記組合使用。
exclusive
告訴安裝程序這個組件與它的也使用 exclusive 標記的同級組件是互相排斥的。
fixed
告訴安裝程序這個組件不能在安裝期間被最終用戶手動選擇或取消選擇。
restart
告訴安裝程序若是用戶安裝了這個組件,將詢問用戶從新啓動系統,無論它是否是須要 (例如,由於 [Files] 段條目用了 restartreplace 標記)。有點象 AlwaysRestart,但不是每一個組件。
disablenouninstallwarning
若是這個組件已經安裝在用戶機器中,從新安裝時在用戶取消這個組件選擇後,這條標記告訴安裝程序不警告用戶不卸載該組件。
考慮到你的組件的複雜性,你能夠嘗試使用 [Installdelete] 段和這個標記爲自動「卸載」取消選定的組件。
示例:
Flags: fixed
[Tasks] 段
這個段是隻選的。它定義安裝程序在執行安裝期間全部由用戶定製的任務。這些任務以選項框和單選項形式在附加任務嚮導頁中出現。
光任務自己是不會作任何事情的: 它須要「連接」到其它安裝條目。查閱組件和任務參數。
這裏是一個 [Tasks] 段的示例:
[Tasks]
Name: desktopicon; Description: "建立桌面快捷方式(&D)"; GroupDescription: "添加快捷方式:"; Components: main
Name: desktopicon\common; Description: "對於全部用戶"; GroupDescription: "添加快捷方式:"; Components: main; Flags: exclusive
Name: desktopicon\user; Description: "僅對當前用戶"; GroupDescription: "添加快捷方式: quicklaunchicon; Description: "建立快速運行欄快捷方式(&Q)"; GroupDescription: "添加快捷方式:"; Components: main; Flags: unchecked
Name: associate; Description: "文件關聯(&A)"; GroupDescription: "其它任務:"; Flags: unchecked
下列是所支持的參數列表:
Name (必需)
描述:
任務的內部名字。
在任務名字中的 \ 或 / 字符合計數是調用任務的層次。任何在層次 1 或更高層次的任務是子任務。在子任務前列出的小於子任務一個層次的任務是上級任務。其它有相同上級任務的任務之間是同級任務。
若是上級任務未選定,則不能選定一個它的子任務。若是全部的子任務均未選定,則上級任務也不能選定,除非任務參數引用上級任務或上級任務包含 checkablealone 標記。
若是同級任務已經標有 exclusive 標記,那麼它們之中只有一個可選。
示例:
Name: "desktopicon"
Description (必需)
描述:
任務的描述,能夠包含常量。這個描述用於在安裝期間顯示給最終用戶參考。
示例:
Description: "建立桌面快捷方式(&D)"
GroupDescription
描述:
任務組的組描述,能夠包含常量。用相同組描述的任務將被連續組合到文字標籤下。文字標籤顯示組描述。
示例:
GroupDescription: "附加圖標"
Components
描述:
這個任務屬於一個用空格隔開的組件列表。若是最終用戶從這個列表中選擇了一個組件,這個任務將顯示。不帶組件參數的任務條目總顯示。
示例:
Components: main
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
checkablealone
指定當一個任務的子任務選中時,該任務是否能夠選中。按默認,若是沒有任務參數直接引用到該任務,未選中全部子任務將會使該任務變成未選中狀態。
checkedonce
告訴安裝程序當安裝程序找到已經安裝的相同應用程序先前版本時,這個任務開始應該不選中。這個標記不能與 unchecked 標記組合使用。
若是 [Setup] 段的 UsePreviousTasks 指示是 no,這個標記是被禁用的。
dontinheritcheck
指定當該任務的上級被選中時,該任務應該不自動變成已選中狀態。這對頂層的任務不影響,且不能與 exclusive 標記組合使用。
exclusive
告訴安裝程序這個任務是與一樣有 exclusive 標記的同級任務互斥的。
restart
告訴安裝程序若是用戶安裝了這個任務,將詢問用戶從新啓動系統,無論它是否是須要 (例如,由於 [Files] 段條目用了 restartreplace 標記)。有點象 AlwaysRestart,但不是每一個任務。
unchecked
告訴安裝程序這個任務在最初應該是不選中。這個標記不能與 checkedonce 標記組合使用。
示例:
Flags: unchecked
[Dirs] 段
這個可選段用來定義除建立用戶選擇的應用程序目錄外安裝程序自動建立的另外目錄。在主應用程序目錄下建立子目錄對於這個段是公共使用的。
請注意,在使用 [Files] 段安裝文件前你無需必定要建立目錄,這個段起初用於建立一個空的目錄。
這裏是一個 [Dirs] 段的示例:
[Dirs]
Name: "{app}\data"
Name: "{app}\bin"
上面的示例中,在安裝程序建立應用程序目錄後,又在應用程序目錄下建立了兩個子目錄。
下列是所支持的參數列表:
Name (必需)
描述:
要建立的目錄名,一般用一個目錄常量開始。
示例:
Name: "{app}\MyDir"
Attribs
描述:
指定目錄的其它屬性。這能夠包含下面屬性中的一個或多個: readonly,hidden,system。若是這個參數未指定,安裝程序不會在目錄中分配任何特殊的屬性。
若是目錄已經存在,指定的屬性將與目錄現有的屬性組合。
示例:
Attribs: hidden system
Permissions
描述:
指定訪問目錄 ACL (訪問控制列表) 另外的承認權限。若是你不熟悉 ACL 或不知道爲何要改變它們,則不推薦你使用這個參數,由於誤用會發生系統衝突,影響安全性。
使 用這個參數還有一個問題用戶必須在使用 Windows 2000 或更高版本 (因爲 API 的 bug,NT 4.0 不支持),目錄必須位於支持 ACL (象 NTFS) 的分區,而且當前的用戶有改變目錄許可的權限。若是這些條件不知足,不會顯示錯誤消息,而且不會設置任何許可。
這個參數只應該用於你應用程序的目錄隱私。決不會改變頂層目錄,象 {sys} 或 {pf} 的 ACL,不然你能夠打開你的用戶系統的安全漏洞。
另 外,推薦你避免使用這個參數,贊成在包含程序文件的目錄的定入訪問。例如,每一個人均可以修改 {app} 目錄的許可將容許沒有權限的用戶損壞你的應用程序的程序文件;這個建立會留下潛在的增長別個攻擊的問題。(但是,在你的應用程序目錄下的子目錄的許但是安 全的,它們不包含程序文件,例如,{app}\data。)
指定的許可設置不考慮安裝前已有的目錄。
這個參數能夠包含象下列格式同樣一個或多個空格分隔的值:
<用戶或組標識>-<訪問類型>
下列是 [Dirs] 段支持的訪問類型:
full
贊成「徹底控制」許可,它與下面的 modify 同樣,但另加上容許指定的用戶/組獲取目錄的全部權並改變它的許可。保守一點使用,通常 modify 就足夠了。
modify
贊成「修改」許可,容許指定的用戶/組讀取,執行,修改和刪除目錄和它的子目錄中的文件。
readexec
贊成「讀取和執行」許可,容許指定的用戶/組閱讀和執行目錄和它的子目錄中的文件。
示例:
Permissions: authusers-modify
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
deleteafterinstall
告訴安裝程序照常建立目錄,但當安裝完成 (或中斷) 後,若是它是空的,則刪除它。好比,你在腳本 [Run] 段定義了一個安裝時要執行的文件,能夠將它提取到臨時數據而後執行後這個標記就至關有用。
這個標記不會致使安裝前已經存在的目錄被刪除。
uninsalwaysuninstall
告訴卸載程序若是目錄是空的,容許刪除該目錄。一般卸載程序只嘗試刪除在安裝前不存在的目錄。
uninsneveruninstall
告訴卸載程序不要刪除目錄。按默認,若是在 [Dirs] 段中指定的目錄已是空的,卸載程序將刪除目錄。
示例:
Flags: uninsneveruninstall
[Files] 段
這是定義安裝程序安裝文件到用戶系統中的可選文件段。
這裏是一個 [Files] 段的示例:
[Files]
Source: "CTL3DV2.DLL"; DestDir: "{sys}"; Flags: onlyifdoesntexist uninsneveruninstall
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
查閱本頁底部的備註段獲取一些重要注意事項。
下列是所支持的參數列表:
Source (必需)
描述:
來源文件的名字。若是你不指定一個完整的路徑名,編譯器將預先考慮你的安裝程序來源目錄的路徑。
這裏能夠在一個條目中用通配符指定一個文件組。當使用通配符時,全部與它匹配的文件使用相同的選項。
當指定 external 標記後,來源必須是發佈的媒介或用戶系統中現有文件 (或做用通配符) 的完整路徑 (例如「{src}\license.ini」)。
當指定 external 標記後,只能使用常量,由於編譯器自身不能執行常量翻譯。
示例:
Source: "MYPROG.EXE"
Source: "Files\*"
DestDir (必需)
描述:
文件安裝到用戶系統中的目錄。基本上都是用一個目錄常量開頭。若是指定的路徑在用戶系統中不存在,它會自動建立,並在卸載後若是是空的,卸載程序會自動刪除。
示例:
DestDir: "{app}"
DestDir: "{app}\subdir"
DestName
描述:
這個參數用來指定將該文件使用新的文件名安裝到用戶系統中,按默認,安裝程序使用 Source 參數中的名字,所以大多數場合中你不須要指定這個參數。
示例:
DestName: "MYPROG2.EXE"
Excludes
描述:
指定要排除的格式列表,用逗號分隔。這個參數不能與 external 標記組合使用。格式能夠包含通配符 (「*」和「?」)。
若是格式用反斜槓符號 (「\」) 若是格式用反斜槓符號 (「\」) 開始,表示它只匹配反斜槓符號左邊的路徑名,不然它一直匹配到路徑名末端。所以「\foo」只排除樹根部的名爲「foo」的文件,「foo」將排除樹中任何地方的名字「foo」的文件。
該格式能夠包含反斜框符號。「foo\bar」表示排除「foo\bar」和「subdir\foo\bar」二者。「\foo\bar」只排除「foo\bar」。
示例:
Source: "*"; Excludes: "*.~*"
Source: "*"; Excludes: "*.~*,\Temp\*"; Flags: recursesubdirs
CopyMode
描述:
你不要在一些新的腳本中使用這個參數。不同意用這個參數,用 Inno Setup 3.0.5 中用下列標記替換:
CopyMode: normal -> Flags: promptifolder
CopyMode: alwaysskipifsameorolder -> no flags
CopyMode: onlyifdoesntexist -> Flags: onlyifdoesntexist
CopyMode: alwaysoverwrite -> Flags: ignoreversion
CopyMode: dontcopy -> Flags: dontcopy
什麼是 CopyMode: alwaysskipifsameorolder 如今是默認動做。(之前默認是 CopyMode: normal。)
Attribs
描述:
指定文件的附加屬性。這能夠包含下列中的一個或多個: readonly,hidden,system。若是未指定這個參數,安裝程序不會在文件中分配任何特殊屬性。
示例:
Attribs: hidden system
Permissions
描述:
指定操做 ACL (訪問控制列表) 的附加許可。若是不熟悉 ACL 或不知道爲何或更改它們,推薦你不要使用,由於誤用會致使衝突,影響系統安全。
用 戶必須在使用 Windows 2000 或更高版本,這個參數纔有效 (NT 4.0 因爲 API 的問題,不支持),文件必須位於支持 supports ACL (象 NTFS) 的分區中,以及當前用戶必須能夠更改文件許可。若是這些條件不東路,不會顯示錯誤消息,也不會設置許可。
這個參數應該只在你的應用程序麼人文件中使用,不要改變共享系統文件的 ACL,不然,你打開了你的用戶系統的安全漏洞。
該指定的許可設置不考慮安裝前文件是否存在。
這個參數能夠包含象下列格式同樣一個或多個空格分隔的值:
<用戶或組標識>-<訪問類型>
[Files] 段支持下列訪問類型:
full
贊成「徹底控制」許可,與修改相同 (看下面),但又加上容許指定的用戶/用戶組獲取文件全部權,並改變它的許可。一般保守的使用 modify 就足夠了。
modify
贊成「修改」許可,容許指定的用戶/用戶組讀取、執行、修改和刪除文件。
readexec
贊成「讀取和執行」許可,容許指定的用戶/用戶組讀取和執行文件。
示例:
Permissions: authusers-modify
FontInstall
描述:
告訴安裝程序須要安裝的文件是一個字體文件,這個參數值是被保存到註冊表或 WIN.INI 文件中的字體名,這個名稱必須與和在資源管理器中雙擊字體文件看到的名字相同。注意,安裝程序會在字體名後自動添加「(TrueType)」。
若是這個字體文件不是一個 TrueType 字體,你必須在標記參數中標記 fontisnttruetype。
這裏建議你在安裝字體到 {fonts} 目錄時,使用 onlyifdoesntexist 和 uninsneveruninstall 標記。
要在 Windows 2000/XP 中成功安裝字體,用戶必須是超級用戶或管理組成員,在 Windows NT 4.0 及早期版本,任何人均可以安裝字體。
示例:
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
allowunsafefiles
禁止編譯器自動檢查不安全文件。強烈推薦你不要使用這個標記,除非你有絕對的把握。
comparetimestamp
(不推薦,看下面)
若是安裝的文件已經在用戶系統中存在,以及至少下列條件中的一個爲 true,則告訴安裝程序進行時間戳比較:
1. 現有的文件和安裝的文件都沒有版本信息。
2. 條目中同時使用了 ignoreversion 標記。
3. 未使用 replacesameversion 標記,而且現有的文件和要安裝的文件版本號相同 (用文件的版本信息決定)。
若是現有的文件的時間戳比安裝的文件老,現有的文件將被替換。不然,將不替換。
如 果尚未其它方法,不推薦使用這個標記,由於其中有一個內部問題: NTFS 分區在 UTC (不一樣於 FAT 分區) 貯存時間戳,因本地時間戳緣由 -- Inno Setup 按默認工做 -- 只要用戶改變他們系統的時間區域,或轉到或使夏令時生效。這可能會致使用戶不但願替換的文件被替換,或用戶但願替換的文件未被替換。
confirmoverwrite
替換現有的文件前老是詢問用戶確認。
createallsubdirs
按默認,當編譯器包含子目錄搜索源文件名/通配符時,將跳過空目錄。這個標記會使這些目錄在安裝時被建立 (就象在 [Dirs] 段建立同樣)。
必須和 recursesubdirs 組合使用。
deleteafterinstall
告訴安裝程序象日常同樣安裝文件,但一旦安裝完成 (或中斷) 則刪除。這在提取腳本中的 [Run] 段指定要執行的臨時程序時有用。
這個標記不會致使安裝期間未被替換的現有文件被刪除。
這個標記不能與 isreadme,regserver,regtypelib,restartreplace,sharedfile 或 uninsneveruninstall 標記組合使用。
dontcopy
不復制文件到用戶系統。若是文件是經過 [code] 專門處理,這個標記是有用的。
dontverifychecksum
防止安裝程序在提取後校驗文件。在你想修改的已編譯到安裝程序中的文件使用這個標記。
必須與 nocompression 組合。
external
這個標記告訴 Inno Setup 不要編譯 Source 參數指定的文件到安裝程序文件中,改成從分佈的媒介或用戶系統中複製。查閱 Source 參數的描述獲取更多信息。
fontisnttruetype
若是用 FontInstall 參數的條目安裝一個非 TrueType 字體,則使用這個標記。
ignoreversion
不比較版本信息;不考慮版本號替換現有的文件。
這個標記應該用於你私人的程序中,不要用於共享的系統文件。
isreadme
表 示文件爲「自述」文件。安裝程序中只有一個文件可使用這個標記。當文件使用這個標記時,在安裝完成後詢問用戶是否想查看自述文件。若是選擇是,安裝程序 將使用與這個文件類型默認的程序打開該文件。因上,自述文件應該老是使用象 .txt,.wri 或 .doc 擴展名。
請注意,若是安裝程序從新啓動了用戶的電腦 (安裝了一個帶 restartreplace 標記的文件或 [Setup] 段的 AlwaysRestart 指示設爲 yes),用戶將沒有查看自述文件的選項。
nocompression
預防編譯器嘗試壓縮文件。在你知道壓縮沒有什麼好處的文件 (例如 JPEG 圖像) 上使用這個標記,能夠加速編譯進度,並可使生成的安裝程序更小。
noencryption
防止文件被加密貯存。若是你已經使用了 encryption (用 [Setup] 段指示 Encryption),但想讓它能夠在用戶輸入正確的密碼以前用 [code] 段支持函數 ExtractTemporaryFile 提取該文件,則使用這個標記。
noregerror
當與 regserver 或 regtypelib 標記中的任一一個組合使用時,安裝程序將在註冊失敗時不顯示任何錯誤消息。
onlyifdestfileexists
僅在用戶系統中已經存在相同名字的文件時安裝文件。若是你的安裝程序是已經安裝的軟件的補丁,而且你但願安裝用戶沒有安裝的文件時,這個標記可能有用。
onlyifdoesntexist
僅在用戶系統中不存在時安裝文件。
overwritereadonly
老是覆蓋只讀文件。若是不帶這個標記,安裝程序在遇到只讀文件時詢問用戶是否覆蓋。
promptifolder
按 默認,當安裝的文件比現有的文件是個較老的版本 (或當使用 comparetimestamp 時發現較早的時間戳)安裝程序將不替換現有的文件 (查閱這個主題下面的備註段獲取詳細資料)。當使用這個標記時,安裝程序將詢問用戶是否替換文件,默認的回答是保留現有的文件。
recursesubdirs
告訴編譯器或安裝程序同時也搜索來源目錄下子目錄中的源文件名/通配符。
regserver
注 冊 OLE 服務 (a.k.a. ActiveX 控件)。使用這個標記,安裝程序將查找和執行 DLL/OCX 的 DllRegisterServer 輸出。卸載程序調用 DllUnregisterServer。當用於與共享文件結合時,DLL/OCX 只將在涉及的計數爲零時取消註冊。
看這個主題下面的備註段獲取更多信息。
regtypelib
註冊類型庫 (.tlb)。卸載程序將撤銷類型庫註冊 (除非指定了 uninsneveruninstall 標記)。與 regserver 標記同樣,當用於與共享文件結合時,文件只將在涉及的計數爲零時取消註冊。
看這個主題下面的備註段獲取更多信息。
replacesameversion
當使用這個標記,而且文件已經在用戶系統中存在,以及它與要安裝的文件版本號相同,安裝程序將比較文件,若是它們的內部不一樣,則替換現有的文件。
默認動做 (例如,當這個標記未使用) 是不替換版本號相同的已有的文件。
restartreplace
這 個標記一般用於替換系統核心文件。若是文件預先已經存在,且發現被鎖定,以致於安裝程序不能替換,安裝程序將註冊該文件 (用 WININIT.INI 可經過使用 MoveFileEx,分別用於 Windows 和 Windows NT) 在下次系統從新啓動時替換。當出現這種狀況時,將在安裝完成時提示用戶從新啓動電腦。
爲保持與 Windows 95/98/Me 兼容,不要在這個條目中使用長文件名,只支持「8.3」文件名。(Windows NT 平臺沒有這個限制。)
重 要提示: 這個 restartreplace 標記只能在用戶有管理員權限時才能在 Windows NT 平臺成功替換使用中的文件。若是用戶沒有管理員權限,將顯示下列消息: 「RestartReplace 失敗: MoveFileEx 失敗; 代碼 5。」所以,當使用 restartreplace 時,強烈推薦你在 [Setup] 段設置「PrivilegesRequired=admin」,讓你的安裝程序必需有管理員權限才能安裝。
sharedfile
使用 Windows 共享文件計數功能 (位於註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \SharedDLLs)。這個功能是用於讓文件在應用程序之間共享使用,不要不注意將它刪除了。每次安裝該文件,涉及的文件計數將增長,當使用這個文件 的應用程序卸載,涉及的文件計數減小。若是計數減小到零,該文件被刪除 (會通知用戶確認,除非同時指定了 uninsnosharedfileprompt 標記)。
使用這個標記的大多數文件被安裝到 Windows 系統目錄,包含 .OCX、.BPL 和 .DPL 文件。
skipifsourcedoesntexist
這個標記告訴編譯器 -- 或安裝程序,若是同時使用了 external 標記 -- 若是源文件不存在,只是跳過該條目,而不是顯示一個錯誤消息。
sortfilesbyextension
這個標記告訴編譯器在按路徑名排序前,先按文件擴展名排序壓縮找到的文件。若是同時使用 SolidCompression,能夠進一步減少安裝程序大小。
touch
這個標記命令安裝程序設置安裝的文件的時間/日期戳爲 [Setup] 段 TouchDate 和 TouchTime 指示指定的值。
若是與 external 標記同時使用,這個標記無效。
uninsnosharedfileprompt
當卸載共享文件時,若是共享計數爲零,不詢問用戶自動刪除文件。必須與 sharedfile 標記組合使用纔有效。
uninsremovereadonly
當卸載文件時,在刪除文件前選刪除它的只讀屬性。
uninsrestartdelete
當 使用這個標記、而且該文件在卸載時正在被使用,卸載將文件放置到刪除隊列,直到系統從新啓動經。卸載結束時會詢問用戶是否從新啓動。這個標記一般在卸載不 能用程序中止的外殼擴展的文件時有用。注意,要使用這個標記生效,在 Windows NT/2000/XP 中,必須要有管理員權限。
uninsneveruninstall
不卸載這個文件。這個標記在安裝在任何狀況下不刪除的公共共享文件時有用,象 MFC DLL。
示例:
Flags: isreadme 組件和任務參數
公共參數
備註
若是文件已經在用戶系統中存在,按默認,將根據下列規則替換:
1. 若是現有的文件版本老於安裝的文件版本 (經過文件的版本信息肯定),現有的文件將被替換。
2. 若是現有的文件版本與安裝的文件版本相同,不替換現有的文件,除非使用了 replacesameversion 標記,且兩個文件的內容不一致。
3. 若是現有的文件版本新於安裝的文件版本,或若是現有的文件有版本信息,但安裝的文件沒有,將不替換現有的文件。
4. 若是現有的文件沒有版本信息,將被替換。
某些標記象 onlyifdoesntexist,ignoreversion 和 promptifolder 會更改上述的規則。
若是未使用 restartreplace 標記,而且由於其它進程正在使用,安裝程序不能替換現有的文件,它將繼續進行四次文件替換嘗試,每次嘗試延時一秒。若是全部嘗試失敗,將顯示一個錯誤消息。
安 裝程序用 regserver 或 regtypelib 標記註冊全部文件爲安裝的最後一個步驟。可是,若是 [Setup] 段指示 AlwaysRestart 設爲 yes,或若是有用 restartreplace 標記的文件,全部文件在下次從新啓動後註冊 (經過在 Windows RunOnce 註冊表鍵中建立一個項目)。
當卸載帶擴展名 .HLP (Windows 幫助文件) 文件後,相應的 .GID 和 .FTS 文件也一樣將自動卸載。
[Icons] 段
這個可選段定義全部建立在開始菜單和/或其它位置 (好比桌面) 的快捷方式。
這裏是 [Icons] 段的例子:
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
Name: "{group}\Uninstall My Program"; Filename: "{uninstallexe}"
下列是所支持的參數列表:
Name (必需)
描述:
要建立的快捷方式的名字和位置。在這個參數中可使用任何外殼文件夾常量或目錄常量。
請注意,快捷方式是貯存爲文字文件,所以在普通文件名中不能使用的字符不這裏也一樣不能使用。一樣,由於不可能有兩個相同名字的文件同樣,也不可能有兩個相同名字的快捷方式。
示例:
Name: "{group}\My Program"
Name: "{group}\Subfolder\My Program"
Name: "{userdesktop}\My Program"
Name: "{commonprograms}\My Program"
Name: "{commonstartup}\My Program"
Filename (必需)
描述:
快捷方式的命令行文件名,一般用一個目錄常量開頭。
示例:
Filename: "{app}\MYPROG.EXE"
Filename: "{uninstallexe}"
Parameters
描述:
快捷方式的可選命令行參數,能夠包含常量。
示例:
Parameters: "/play filename.mid"
WorkingDir
描述:
快捷方式的工做 (或啓動) 目錄,就是指示程序在哪一個目錄開始運行。若是這個參數未指定或是空白的,Windows 將使用一個默認路徑,在 Windows 不一樣版本之間是不一樣的。這個參數能夠包含常量。
示例:
WorkingDir: "{app}"
HotKey
描述:
快捷方式的熱鍵 (或快捷鍵) 設置,就是能夠用於啓動程序的組合鍵。
注意: 若是你改變了快捷鍵並從新安裝了應用程序,Windows 能夠繼續承認老的快捷鍵,直到你註銷並返回或從新啓動系統。
示例:
HotKey: "ctrl+alt+k"
Comment
描述:
指定快捷方式的註釋 (或描述) 對象,在 Windows 2000,Me 及更高版本中能夠用來彈出提示。早期版本的 Windows 被忽略註釋。
示例:
Comment: "This is my program"
IconFilename
描述:
要顯示的自定義圖標文件名 (位於用戶系統)。這能夠是一個包含圖標文件的可執行映像 (.exe, .dll)或一個 .ico 文件。若是這個參數未指定或空白,Windows 將使用文件的默認圖標,這個參數能夠包含常量。
示例:
IconFilename: "{app}\myicon.ico"
IconIndex
默認: 0
描述:
用 IconFilename 指定的文件中使用的以零爲基點的圖標索引。
若是 IconIndex 非零值,以及 IconFilename 未指定或空白,它將默認爲 IconFilename 與 Filename 名相同。
示例:
IconIndex: 0
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
closeonexit
當設置這個標記時,安裝程序將設置快捷方式的「退出時關閉」屬性。這個標記只在快捷方式指向 MS-DOS 應用程序時有效 (若是它是 .pif 擴展名)。若是沒有這個標記也沒有指定 dontcloseonexit 標記,安裝程序將嘗試改變「退出時關閉」屬性。
createonlyiffileexists
當設置這個標記時,安裝程序將只在用文件名參數指定的文件存在時嘗試建立圖標。
dontcloseonexit
等同於 closeonexit,除了它致使安裝程序不選中「退出時關閉」屬性。
foldershortcut
建立一個特殊的象「文件夾快捷方式」的快捷方式類型。通常來講,文件夾快捷方式出如今開始菜單中,單擊該快捷方式會打開資源管理器窗口顯示文件夾內容。與此相反,「文件夾快捷方式」將象菜單同樣顯示目標文件夾的內容,而不是單獨打開一個窗口。
文件夾快捷方式只支持 Windows 2000、Me 和最高版本,一些早期版本的 Windows,安裝程序在遇到這個標記時,將返回建立一個普通快捷方式。
當使用這個標記,文件夾名必須在文件名參數中指定。指定一個文件名字將致使毫無用處的快捷方式。
runmaximized
當設置這個標記時,安裝程序設置圖標的「運行」設置爲「最大化」,使程序在啓動後初始狀態爲最大化。
runminimized
當設置這個標記時,安裝程序設置圖標的「運行」設置爲「最小化」,使程序在啓動後初始狀態爲最小化。
uninsneveruninstall
通知卸載程序不刪除圖標。
useapppaths
當 設置這個標記時,只在文件名參數中指定文件名 (無路徑),安裝程序將從「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\App Paths」註冊表鍵獲取路徑名,並自動添加到文件名前面。
示例:
Flags: runminimized
[INI] 段
這是你但願安裝程序在用戶系統中設置 .INI 文件條目的可選段。
這裏是 [INI] 段的例子:
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesection
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"
下列是所支持的參數列表:
Filename (必需)
描述:
你但願安裝程序修改的 .INI 文件的名字,能夠包含常量。若是這個參數是空白的,它寫入到系統的 Windows 目錄中的 WIN.INI 中。
示例:
Filename: "{win}\MYPROG.INI"
Section (必需)
描述:
要建立的用於放置 INI 條目的區段名,能夠包含常量。
示例:
Section: "Settings"
Key
描述:
要設置的鍵名,能夠包含常量。若是這個參數未指定或是空白的,將不建立鍵。
示例:
Key: "Version"
String
描述:
分配給鍵的值,可使用常量。若是這個參數未指定,將不建立鍵。
示例:
String: "1.0"
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
createkeyifdoesntexist
僅在若是鍵名不存在時分配到鍵。
uninsdeleteentry
當程序卸載時刪除條目。這能夠寫 uninsdeletesectionifempty 標記組合使用。
uninsdeletesection
當程序卸載時,刪除條目所在的整個區段。這對於在 Windows 它自身包含的 INI 文件 (象一些 WIN.INI 中的區段) 中使用,這具備很大的危險性。你應該只在應用程序私有的文件中使用這個標記。
uninsdeletesectionifempty
等同於 uninsdeletesection,但只在沒有鍵剩餘的狀況下刪除段,它能夠與 uninsdeleteentry 標記組合使用。
示例:
Flags: uninsdeleteentry
[Installdelete] 段
這個可選段格式與 [Uninstalldelete] 同樣,除了它的條目處理在安裝步驟以前。
[Languages] 段
Inno Setup 支持多語言安裝。[Languages] 段用來定義安裝程序中可以使用的語言。
安裝程序用下列順序肯定在消息中默認使用的語言:
1. 搜索 LanguageID 設置的語言 (一般指定在語言文件 .isl 的 [LangOptions] 段) 匹配首選語言標識和當前用戶界面語言或本地 (根據 LanguageDetectionMethod) 子語言標識二者。
2. 若是未發現,只搜索匹配的首選語言標識。若是兩個或多個可用文有相同的首選語言標識,它將使用在 [Languages] 段中列出的第一個。
3. 若是未發現,默認爲指定在 [Languages] 段的第一個語言。
若是 [Setup] 段的 ShowLanguageDialog 指示設置爲 yes (默認),將顯示一個選擇語言對話框,使用戶有機會忽略語言安裝選擇。
ShowLanguageDialog 指示設置爲 yes (默認),將顯示一個選擇語言對話框,使用戶有機會忽略語言安裝選擇。
下面是 [Languages] 段的一個示例。它定義兩個語言: 簡體中文,根據標準的漢化版的 Default.isl 文件,以及英語,原版的語言文件,漢化版中已包括。
[Languages]
Name: "chs"; MessagesFile: "compiler:Default.isl"
Name: "en"; MessagesFile: "compiler:English.isl"
Name (必需)
描述:
語言的內部名字,你能夠設置爲你喜歡的任何東西。這能夠用做 [LangOptions] 或 [Messages] 段條目的前綴,使這些條目只用一種語言。{language} 常量返回選定語言的內部名字。
示例:
Name: "en"
MessagesFile (必需)
描述:
指定要讀取的默認消息的文件名。這個文件必須位於你的安裝程序的來源目錄,除非你指定了文件的完整路徑或用「compiler:」做爲前綴,在這種場合下它會在編譯器目錄下查找文件。
當指定多個文件時,它按指定的順序讀取,所以最後的消息文件將覆蓋前面的全部文件。
查閱 [Messages] 段幫助主題獲取 .isl 文件格式中的詳細資料。
示例:
MessagesFile: "compiler:Dutch.isl"
MessagesFile: "compiler:Default.isl,compiler:MyMessages.isl"
LicenseFile
描述:
指 定可選的許可協議文件名字,用 .txt 或 .rtf (富文本) 格式,它顯示在用戶選擇程序的目標目錄以前。在運行安裝程序編譯器時,這個文件必須位於你的安裝程序的來源目錄,除非你指定了文件的完整路徑或用 「compiler:」做爲前綴,在這種場合下它會在編譯器目錄下查找文件。
示例:
LicenseFile: "license-Dutch.txt"
InfoBeforeFile
描述:
指 定可選的「自述」文件名字,用 .txt 或 .rtf (富文本) 格式,它顯示在用戶選擇程序的目標目錄以前。在運行安裝程序編譯器時,這個文件必須位於你的安裝程序的來源目錄,除非你指定了文件的完整路徑或用 「compiler:」做爲前綴,在這種場合下它會在編譯器目錄下查找文件。
示例:
InfoBeforeFile: "infobefore-Dutch.txt"
InfoAfterFile
描述:
指 定可選的「自述」文件名字,用 .txt 或 .rtf (富文本) 格式,它顯示在完成安裝以後。在運行安裝程序編譯器時,這個文件必須位於你的安裝程序的來源目錄,除非你指定了文件的完整路徑或用「compiler:」 做爲前綴,在這種場合下它會在編譯器目錄下查找文件。
這與 isreadme 文件不一樣,它裏面的文字顯示這一個嚮導頁中,而不是一個單獨的記事本窗口。
示例:
InfoAfterFile: "infoafter-Dutch.txt"
[Messages] 段
[Messages] 段用於定義顯示在安裝程序和卸載程序中的消息。一般,你不須要在你的腳本中建立 [Messages] 段,按默認,全部的消息在 Inno Setup 的 Default.isl 文件 (或在 [Languages] 段指定的條目) 中已經包含。
可是,一些特殊的消息可 以用建立在腳本文件 [Messages] 段的內容覆蓋。要覆蓋消息,首先你須要知道你想更的消息 ID。這能夠經過搜索 Default.isl 很容易地找到。例如,你想改變嚮導頁「&Next >」按鈕爲「前進(&F) >」,此消息的 ID 是「ButtonNext」,因此你只要在 [Messages] 段寫入下面的內容:
[Messages]
ButtonNext=前進(&F) >
一 些消息包含變量,象 %1 和 %2。你能夠從新排列變量順序 (例如將 %2 移到 %1 以前),也能夠在須要的狀況下重複使用同一變量 (例如「%1 ... %1 %2」)。在帶變量的消息中,使用兩個連續的「%」字符,表示要置入單個「%」。「%n」表示換行符。
若是你想翻譯 全部 Inno Setup 的文本其它語言,而不是修改 Default.isl 或覆蓋在你建立的全部腳本中的每一個消息,將 Default.isl 複製一份,用其它名字象 MyTranslation.isl 命名。在你想使用 MyTranslation.isl 的安裝程序中,建立一個 [Languages] 段 指向該文件。
在一些場合中,這裏有多個 [Languages] 段條目,在你的腳本中指定一個 [Messages] 段條目 (與 .isl 文件中指定的條目不一樣) 將按默認不考慮全部語言消息。要應用一個 [Messages] 段條目到只使用於一種語言,在語言的內部名字前加到前綴並跟隨一個點。例如:
en.ButtonNext=前進(&F) >
特殊用途標識
BeveledLabel 消息的特殊用途是能夠用於指定顯示在嚮導窗口和卸載程序窗口左下角的文本行,下面是一個示例:
[Messages]
BeveledLabel=Inno Setup
[CustomMessages] 段
[CustomMessages] 段用於定義 {cm:...} 常量的自定義消息值。查閱常量幫助文檔內容獲取更多信息。
從 [CustomMessages] 段使用 {cm:...} 常量獲取的帶描述的任務示例:
[CustomMessages]
createDesktopIcon=建立桌面快捷方式(&D)
[Tasks]
Name: desktopicon; Description: "{cm:createDesktopIcon}"
消息能夠獲取從 %1 到 %9 的聲明。你能夠從新排列它們的順序 (例如,將 %2 移到 %1 以前),也能夠在須要時重複聲明 (例如「%1 ... %1 %2」)。在帶聲明的消息中,使用兩個連續的「%」字符表示嵌入單個「%」。「%n」建立一個換行符。
在 一些多個 [Languages] 段條目的場合下,在你的腳本中指定一個 [CustomMessages] 段條目 (對於 .isl 文件) 將按默認覆蓋全部語言的消息。要只在一種語言中使用 [CustomMessages] 段條目,用語言的內部名字做爲前綴,而後跟隨一個句點。例如:
nl.createDesktopIcon=Maak een snelkoppeling op het &bureaublad
一般全部有下列自定義消息定義和每種語言的翻譯已經包含在各自的語言 .isl 文件中 (以簡體中文語言爲例):
NameAndVersion=%1 版本 %2
AdditionalIcons=附加快捷方式:
createDesktopIcon=建立桌面快捷方式(&D)
createQuickLaunchIcon=建立快速運行欄快捷方式(&Q)
ProgramOnTheWeb=%1 網站
UninstallProgram=卸載 %1
LaunchProgram=運行 %1
AssocFileExtension=將 %2 文件擴展名與 %1 創建關聯(&A)
AssocingFileExtension=正在將 %2 文件擴展名與 %1 創建關聯...
你能夠在腳一中使用這些預約的自定義消息。下列是在 UninstallProgram 中使用的示例:
[Icons]
Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}"
[LangOptions] 段
[LangOptions] 段用於定義特殊語言設置,象字體同樣,被安裝程序和卸載程序使用。一般,你不須要在你的腳本中建立 [LangOptions] 按默認,全部的特殊語言設置在 Inno Setup 的 Default.isl 文件 (或在 [Languages] 段指定的條目) 中已經包含。
下面是 [LangOptions] 段的一個例子。(下面列出的設置是默認值。)
[LangOptions]
LanguageName=English
LanguageID=$0409
LanguageCodePage=0
DialogFontName=
DialogFontSize=8
WelcomeFontName=Verdana
WelcomeFontSize=12
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8
LanguageName 是語言的名字。它顯示在多語言安裝程序中的選擇語言對話框可用語言列表中。它以 Unicode 字符形式 (在 NT 平臺也是這樣顯示) 貯存在內部。要嵌入 Unicode 字符,使用「<nnnn>」,這裏的「nnnn」是 4 位數的十六進制 Unicode 字符集。你能夠在 Windows 2000 及更高版本中的附件中用字符映射表查找字符的 Unicode 字符集。
LanguageID 是語言的數字化「語言標識」。查閱 http://msdn.microsoft.com/library/en-us/intl/nls_238z.asp 獲取有效的語言標識列表。這是用來自動偵測默認使用的語言,請確保它格式使用正確,老是用一個「$」符號做爲開頭,由於語言標識是十六進制格式。
LanguageCodePage 用來指定顯示語言所須要的「代碼頁」。當在多語言安裝的選擇語言對話框中加上可用語言列表時,它的 LanguageCodePage 值與系統代碼頁進行比較以肯定應該列出哪些語言。只有那些 LanguageCodePage 的值與系統代碼頁匹配的語言才能顯示。目的是不顯示在用戶系統中不能正確顯示的語言。例如,俄語文字不能在除代碼頁爲 1251 的系統中正確顯示,所以若是系統運行在其它代碼頁中,俄語沒有必要列出。
若是 LanguageCodePage 設爲 0,該語言將老是在列表中列出,且不考慮系統的代碼頁。它能夠判斷在包含純 ASCII 的語言中使用 0。例如象 English,由於 ASCII 一樣能夠在全部代碼頁中使用。
DialogFontName 和 DialogFontSize 指定在對話框中使用的字體名和大小 (磅)。若是指定的字體名在用戶系統中不存在,或是一個空字串,將用 8 磅大小的 Microsoft Sans Serif 或 MS Sans Serif 替換。
WelcomeFontName 和 WelcomeFontSize 指定在歡迎向導頁和安裝完成嚮導頁中的字體名和大小 (磅)。若是指定的字體名在用戶系統中不存在,或是一個空的字符,將用 12 磅大小的 Microsoft Sans Serif 或 MS Sans Serif 替換。
TitleFontName 和 TitleFontSize 指定在背景窗口頂部 (僅在 indowVisible=yes 時可見) 使用的字體名和大小 (磅)。若是指定的字體名在用戶系統中不存在,將用 29 磅的 Arial 代替。若是指定的字體名是空的,將用 29 磅的 Microsoft Sans Serif 或 MS Sans Serif 代替。
CopyrightFontName 和 CopyrightFontSize 指定在背景窗口中 AppCopyright 消息 (僅在 indowVisible=yes 時可見) 使用的字體名和大小 (磅)。若是指定的字體名在用戶系統中不存在,將用 8 磅的 Arial 代替。若是指定的字體名是空的,將用 8 磅的 Microsoft Sans Serif 或 MS Sans Serif 代替。
在有多個 [Languages] 段條目的狀況下,在腳本中指定一個 [LangOptions] 段指示 (不一樣於 an .isl 文件) 將按默認不覆蓋全部語言指示。要應用 [LangOptions] 段指示到其中一種語言,用語言的內部名字跟隨一個點做爲前綴。例如:
en.LanguageName=English
[Registry] 段
這個可選段用來定義一些你想用安裝程序在用戶系統中建立、修改或刪除的註冊表鍵/值。
按默認,用安裝程序建立的註冊表鍵和值在卸載時不刪除。若是你想讓卸載程序刪除鍵或值,你必須包含下面 uninsdelete* 標記中的一個。
下面是 [Registry] 段的一個示例。
[Registry]
Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
下列是所支持的參數列表:
Root (必需)
描述:
根鍵。必須是下列中的一個:
HKCR (HKEY_CLASSES_ROOT)
HKCU (HKEY_CURRENT_USER)
HKLM (HKEY_LOCAL_MACHINE)
HKU (HKEY_USERS)
HKCC (HKEY_CURRENT_CONFIG)
示例:
Root: HKCU
Subkey (必需)
描述:
子鍵名,能夠包含常量。
示例:
Subkey: "Software\My Company\My Program"
ValueType
描述:
值的數據類型。必須是下面中的一個:
none
string
expandsz
multisz
dword
binary
若是指定了 none (默認設置),安裝程序將建立一個沒有鍵值的鍵,在這種狀況下,ValueName 和 ValueData 參數將被忽略。
若是指定了 string,安裝程序將建立一個字符串 (REG_SZ) 值。
若是指定了 expandsz,安裝程序將建立一個擴展字符串 (REG_EXPAND_SZ) 值。這種數據類型起初是用於 Windows NT/2000/XP 上,可是也支持 Windows 95/98/me。
若是指定了 multisz,安裝程序將建立一個多行文本 (REG_MULTI_SZ) 值。
若是指定了 dword,安裝程序將建立一個整數 (REG_DWORD) 值。
若是指定了 binary,安裝程序將建立一個二進制 (REG_BINARY) 值。
示例:
ValueType: string
ValueName
描述:
要建立的值名,能夠包含常量。若是是空白的,將寫入到「默認」值。若是 ValueType 參數設置爲 none,這個參數被忽略。
示例:
ValueName: "Version"
ValueData
描述:
值 的數據。若是 ValueType 參數是 string,expandsz 或 ultisz,這是這一個能夠包含常量的字符串。若是數據類型是 dword,這能夠是一個十進制整數 (例如「123」),一個十六進制整數 (例如「$7B」) 或解析爲整數的常量。若是數據類型是 binary,這能夠是下列形式的十六進制字節序列: 「00 ff 12 34」。若是數據類型是 none,將被忽略。
在 string,expandsz 或 multisz 類型值中,你能夠在這個參數中使用一個特殊的常量調用 {olddata}。{olddata} 用先前的註冊表值數據替換。若是你想添加一個字串到現有的值中,{olddata} 常量很是有用。例如,{olddata};{app}。若是該值不存在或現有的值不是一個字符串類型,{olddata} 常量將被刪除。若是建立的值是一個 multisz 類型,但現有的值不是多行字符類型(例如,它是 REG_SZ 或 REG_EXPAND_SZ),{olddata} 常量也將被刪除。反這亦然。
在 multisz 類型值中,你能夠在參數中使用一個特殊常量調用 {break} 以插入換行符。
示例:
ValueData: "1.0"
Permissions
描述:
指定登陸註冊表鍵 ACL (訪問控制列表) 的附加權限。若是你不熟悉 ACL 或你不知道爲何要列改,不推薦你使用這個參數,由於誤用會致使重大的系統安全問題。
這個參數在用戶必須運行 Windows 2000 或更高版本 (NT 4.0 因爲 API 的問題不支持) 以及當前用戶必須有更改註冊表的權限時纔有效。這些條件不知足時,不會顯示錯誤消息,權限也不會被設置。
這個參數應該只使用於你的應用程序特有的註冊表鍵中。不要更改頂級鍵象 HKEY_LOCAL_MACHINE\SOFTWARE 的 ACL,不然你本身打開了用戶系統的安全漏洞。
指定的權限不考慮註冊表鍵在安裝前是否存在。若是 ValueType 是 none 和使用了 deletekey 或 deletevalue 標記時,不要設置這個權限。
這個參數能夠包含象下列格式同樣一個或多個空格分隔的值:
<用戶或組標識>-<訪問類型>
下面是 [Registry] 段支持的訪問類型:
full
贊成「徹底控制」許可,與修改相同 (看下面),但又加上容許指定的用戶/用戶組獲取註冊表鍵全部權,並改變它的許可。一般保守的使用 modify 就足夠了。
modify
贊成「修改」許可,容許指定的用戶/用戶組讀取、修改和刪除註冊表值或子鍵。
read
贊成「讀取和執行」許可,容許指定的用戶/用戶組讀取註冊表值或子鍵。
示例:
Permissions: authusers-modify
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
createvalueifdoesntexist
當指定了這個標記,安裝程序只在若是沒有相同名字的值存在時建立值。若是值類型是 none,或若是你指定了 deletevalue 標記,這個標記無效。
deletekey
當指定了這個標記,安裝程序在若是條目存在的狀況下,先將嘗試刪除它,包括其中的全部值和子鍵。若是 ValueType 不是 none,那麼它將建立一個新的鍵和值。
要防止意外,若是子鍵是空白的或只包含反斜框符號,安裝時這個標記被忽略。
deletevalue
當指定了這個標記,安裝程序在若是值存在的狀況下,先將嘗試刪除值,若是 ValueType 是 none,那麼在鍵不存在的狀況下,它將建立鍵以及新值。
dontcreatekey
當指定了這個標記,若是鍵已經在用戶系統中不存在,安裝程序將不嘗試建立鍵或值。若是鍵不存在,不顯示錯誤消息。
通常來講,這個鍵與 uninsdeletekey 標記組合使用,在卸載時刪除鍵,但安裝時不建立鍵。
noerror
若是安裝程序因任何緣由建立鍵或值失敗,不顯示錯誤消息。
preservestringtype
這 只在當 ValueType 參數是 string 或 expandsz 時適用。當指定這個標記,而且值不存在或現有的值不是 string 類型 (REG_SZ 或 REG_EXPAND_SZ),它將用 ValueType 指定的類型建立。若是值存在,而且是 string 類型,它將用先存在值的相同值類型替換。
uninsclearvalue
當卸載程序時,設置值數據爲空字符 (類型 REG_SZ)。這個標記不能與 uninsdeletekey 標記組合使用。
uninsdeletekey
當卸載程序時,刪除整個鍵,包含其中的全部值和子鍵。這對於 Windows 自身使用的鍵明顯不是一個好方法。你只能用於你的應用程序特有的鍵中。
爲防止意外,安裝期間若是子鍵空白或只包含反斜框符號,這個標記被忽略。
uninsdeletekeyifempty
當程序卸載時,若是這個鍵的內部沒有值或子鍵,則刪除這個鍵。這個標記能夠與 uninsdeletevalue 組合使用。
爲防止意外,安裝期間若是子鍵空白或只包含反斜框符號,這個標記被忽略。
uninsdeletevalue
當程序卸載時刪除該值。這個標記不能與 uninsdeletekeyifempty 組合使用。
注意: 在早於 1.1 的 Inno Setup 版本中,你可使用這個標記連同數據類型 none,那麼它的功能與「若是空則刪除鍵」標記同樣。這個方法已經不支持了。你必須使用 uninsdeletekeyifempty 標記實現。
示例:
Flags: uninsdeletevalue
[Run] & [UninstallRun] 段
[Run] 段是可選的,用來指定程序完成安裝後、在安裝程序顯示最終對話框以前要執行的程序數,[UninstallRun] 段也可樣是可選的,用來指定在卸載第一步要執行的程序數。除在下面有註釋的外,兩個段用相同的語法。
程序按它們在腳本中的出現順序執行。按默認,當處理 [Run]/[UninstallRun] 段條目時,安裝程序/卸載程序將在處理下一個任務以前等待,直到程序終止。除非使用了 nowait,shellexec 或 waituntilidle 標記。
注 意,按默認,若是 [Run] 段隊列文件中的一個正在執行的程序要在下一次從新啓動後替換 (經過調用 MoveFileEx 或經過修改 wininit.ini),安裝程序將進行偵測,並在安裝結束後提示用戶從新啓動電腦。若是你不想這麼作,設置 RestartIfNeededByRun 指示爲 no。
下面是 [Run] 段的一個示例。
[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
Filename: "{app}\README.TXT"; Description: "查看自述文件"; Flags: postinstall shellexec skipifsilent
Filename: "{app}\MYPROG.EXE"; Description: "運行應用程序"; Flags: postinstall nowait skipifsilent unchecked
下列是所支持的參數列表:
Filename (必需)
描述:
要執行的程序,或要打開的文件/文件夾。若是 Filename 不是一個可執行文件 (.exe 或 .com) 或批處理文件 (.bat 或 .cmd),你必須在條目中使用 the shellexec 標記。這個參數能夠包含常量。
示例:
Filename: "{app}\INIT.EXE"
Description
描述:
僅在 [Run] 段有效。這是條目的描述,能夠包含常量。這個描述用於帶 postinstall 標記的條目。若是條目的描述未指定,安裝程序將使用一個默認描述。這個描述根據條目的類型(normal 或 shellexec)。
示例:
Description: "查看自述文件"
Parameters
描述:
程序的可選命令行參數,能夠包含常量。
示例:
Parameters: "/x"
WorkingDir
描述:
指定程序在哪一個目錄啓動。若是這個參數未指定或是空白的,它使用 Filename 參數中的目錄。若是 Filename 不包含路徑,它將使用默認目錄。這個參數能夠包含常量。
示例:
WorkingDir: "{app}"
StatusMsg
描述:
僅在 [Run] 段有效。肯定程序執行時顯示在嚮導頁的消息。若是這個參數未指定但是空白的,將使用默認的消息「正在完成安裝...」。這個參數能夠包含常量。
示例:
StatusMsg: "正在安裝 BDE..."
RunOnceId
描述:
僅 在 [UninstallRun] 段有效。若是已經安裝了相同的應用程序,卸載日誌文件中的「run」條目將被複制一個副本。經過分配一個字符給 RunOnceId,能夠確保在卸載期間特殊的 [UninstallRun] 條目只執行一次。例如,若是卸載日誌中有兩個或更多「run」條目用「DelService」的 RunOnceId 設置,只執行最後一個用「DelService」的 RunOnceId 設置的條目;其它的將被忽略。注意 RunOnceId 比校是區分大小寫的。
示例:
RunOnceId: "DelService"
Flags
描述:
這個參數是額外選項設置。多個選項可使用空格隔開。支持下面的選項:
hidewizard
若是指定了這個標記,嚮導將在程序運行期間隱藏。
nowait
若是指定了這個標記,它將在處理下一個 [Run] 條目前或完成安裝前不等待進程執行完成。不能與 waituntilidle 或 waituntilterminated 組合使用。
postinstall
僅在 [Run] 段有效。告訴安裝程序在安裝完成嚮導頁建立一個選擇框,用戶能夠選中或不選中這個選擇框從而決定是否處理這個條目。之前這個標記調用 showcheckbox。
若是安裝程序已經從新啓動了用戶的電腦 (安裝了一個帶 restartreplace 標記的文件或若是 [Setup] 段的 AlwaysRestart 指示是 yes 引發的),選擇框沒有機會出現,所以這些條目不會被處理。
[Files] 段條目中的 isreadme 標記如今已被廢棄。若是編譯器帶 isreadme 標記的條目,它將從 [Files] 段條目中忽略這個標記,並在 [Run] 段條目列表的開頭插入一個生成的 [Run] 條目。這相生成的 [Run] 段條目運行自述文件,並帶有 shellexec、skipifdoesntexist、postinstall 和 skipifsilent 標記。
runhidden
若是指定了這個標記,它將在隱藏窗口中運行程序。請在執行一個要提示用戶輸入的程序中不要使用這個標記。
runmaximized
若是指定了這個標記,將在最大化窗口運行程序或文檔。
runminimized
若是指定了這個標記,將在最小化窗口運行程序或文檔。
shellexec
若是 Filename 不是一個直接可執行文件 (.exe 或 .com 文件),這個標記是必需的。當設置這個標記時,Filename 能夠是一個文件夾或任何已註冊的文件類型 -- 包括 .hlp,.doc 等。
該文件將用用戶系統中與這個文件類型關聯的應用程序打開,與在資源管理器雙擊文件的方法是相同的。
按默認,當使用 shellexec 標記時,將不等待,直到生成的進程終止。
若是你須要,你必須添加標記 waituntilterminated。注意,若是新進程未生成,它不能執行也將不等待 -- 例如,文件指定指定爲一個文件夾。
skipifdoesntexist
若是這個標記在 [Run] 段中指定,若是文件名不存在,安裝程序不顯示錯誤消息。
若是這個標記在 [UninstallRun] 段中指定,若是文件名不存在,卸載程序不顯示「一些元素不能刪除」的警告。
skipifnotsilent
僅在 [Run] 段有效。告訴安裝程序若是安裝程序未在後臺運行則跳過這個條目。
skipifsilent
僅在 [Run] 段有效。告訴安裝程序若是安裝程序在後臺運行則跳過這個條目。
unchecked
僅在 [Run] 段有效。告訴安裝程序初始爲不選中選擇框。若是用戶但願處理這個條目,能夠經過選取選擇框執行。若是 postinstall 標記未同時指定,這個標記被忽略。
waituntilidle
若是指定了這個標記,它將在未輸入期間等待,直到進程等待用戶輸入,而不是等待進程終止。(調用 WaitForInputIdle Win32 函數。) 不能與 nowait 或 waituntilterminted 組合使用。
waituntilterminated
若是指定這個標記,將等待到進程徹底終止。注意這是一個默認動做 (也就是你不須要指定這個標記),除非你使用了 shellexec 標記,在這種狀況下,若是你要等待,須要指定這個標記。不能與 nowait 或 waituntilidle 組合使用。
示例:
Flags: postinstall nowait skipifsilent
[Uninstalldelete] 段
這個可選段定義你想讓卸載程序刪除除用 [Files] 或 [Dirs] 條目安裝/建立外的其它文件或目錄,或由你應用程序建立的一些公共使用的 .INI 文件。卸載程序在卸載時最後一步處理這些條目。
這裏是 [Uninstalldelete] 段的一個示例:
[Uninstalldelete]
Type: files; Name: "{win}\MYPROG.INI"
下列是所支持的參數列表:
Type (必需)
描述:
指定卸載程序要刪除的是什麼。必須是下面中的一個:
files
該名字參數指定一個詳細的文件名,或帶通配符的文件名。
filesandordirs
除同時還匹配目錄名外,功能與 files 相同,並刪除任何名字匹配的目錄以及包含它們中的全部文件和子目錄。
dirifempty
當使用這個參數時,名字參數必須是目錄名,但它不能包含通配符。該目錄只在不包含任何文件或子目錄的狀況下才被刪除。
示例:
Type: files
Name (必需)
描述:
要刪除的文件或目錄名。
注 意: 不要嘗試在這裏使用通配符用來刪除 {app} 目錄中的全部文件。我強烈推薦你不要這麼作有兩個緣由。首先,用戶一般不但願將他們放置在應用程序目錄中的數據文件在沒有警告的狀況下被刪除 (例如,若是用戶將它移動到其它驅動器,那麼有些不用刪除的內容將被卸載)。最好是保留它讓最終用戶在卸載後手動刪除。同時,若是用戶因爲過失恰好將程序 安裝在危險的目錄(例如,C:\WINDOWS),若是這時卸載將後果嚴重。再說一遍,不要這麼作!
示例:
Name: "{win}\MYPROG.INI"
八、Pascal腳本
介紹
Pascal 腳本功能 (modern Delphi-like Pascal) 增長了許多新的功能定製你的安裝程序和卸載程序,一些例子:
支持自定義條件的狀況下的中斷安裝和卸載。
支持的安裝程序運行時添加自定義嚮導頁。
在安裝前、安裝期間、安裝後從 Pascal 腳本提取或調用 DLL 或其它文件。
支持看成任何普一般量的腳本化常量,從註冊表讀取,從 ini 讀取和從命令行讀取常量等。
支持運行時自定義條件下的類型、組件和/或任務的刪除。
根據自定義條件支持有條件的 [Files]、[Registry]、[Run] 等條目安裝。
幾乎 Inno Setup 自身能夠執行的許多支持函數來自 Pascal 腳本。
也可使用一個完整的 run-time 調試器調試你的自定義 Pascal 腳本。
用於 Inno Setup 的腳本引擎是來自 Innerfuse 的 Carlo Kok 編寫的 Innerfuse Pascal 腳本,Innerfuse Pascal 腳本是無償使用,並帶有源代碼。查閱 http://www.remobjects.com/?ps
獲取更多信息。
創 建 [code] 段[code] 段是一個可選的指定 Pascal 腳本的段。Pascal 腳本能夠用於經過多種方法定製安裝程序或卸載程序。請注意,建立 Pascal 腳本不是很方便,須要有豐富的 Inno Setup 使用經驗,以及 Pascal 或至少一種其它類型語言的設計知識。
Inno Setup 目錄的「Examples」子目錄下有一些「Code*.iss」和「UninstallCode*.iss」文件,包含各類 [code] 段的使用示例。請在建立你本身的 Pascal 腳本前仔細學習。
注意: 要學習更多 Pascal 程序語言,你可查找一些有用的 Marco Cantu 免費的基本 Pascal 書籍。
事件函數
Pascal 腳本能夠包含單獨的在適當時間調用的事件函數,對於安裝程序,它們是:
function InitializeSetup(): Boolean;
在安裝程序初始化時調用,返回 False 中斷安裝,返回 True 反之。
procedure InitializeWizard();
使用這個事件函數啓動時改變嚮導或嚮導頁。你不能在它觸發以後使用 InitializeSetup 事件函數,嚮導窗體不退出。
procedure DeinitializeSetup();
僅在安裝程序終止前調用。注意這個函數在即便用戶在任何內容安裝以前退出安裝程序時也會調用。
procedure CurStepChanged(CurStep: TSetupStep);
你能夠用這個事件函數執行你本身的預安裝和安裝後任務。
在實際安裝開始以前用 CurStep=ssInstall 調用,或在實際安裝完成以後用 CurStep=ssPostInstall 調用,或在安裝程序終止以前和安裝完成以後用 CurStep=ssDone 調用。
function NextButtonClick(CurPageID: Integer): Boolean;
當用戶單擊下一步按鈕時調用。若是你返回 True,嚮導將移到下一頁;若是返回 False,它仍保留在當前頁 (用 CurPageID 指定)。
注意,這個函數在靜寂安裝時也會調用,即便沒有下一步按鈕讓用戶單擊。安裝程序會模擬單擊下一步按鈕。在靜寂安裝中,若是你的 NextButtonClick 函數在安裝以前返回 False,安裝程序將自動退出。
function BackButtonClick(CurPageID: Integer): Boolean;
當用戶單擊上一步按鈕時調用。若是你返回 True,嚮導將移到上一頁;若是返回 False,它仍保留在當前頁 (用 CurPageID 指定)。
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
當 用戶單擊取消按鈕或單擊窗口中的關閉按鈕時調用。Cancel 參數指定是不是通常的取消進程;默認爲 True。Confirm 參數指定是否顯示「退出安裝程序嗎?」的消息框;通常它默認爲 True。若是 Cancel 設爲 False,那麼 Confirm 值被忽略。
function ShouldSkipPage(PageID: Integer): Boolean;
嚮導調用這個事件函數肯定是否在全部頁或不在一個特殊頁 (用 PageID 指定) 顯示。若是返回 True,將跳過該頁;若是你返回 False,該頁被顯示。
注意: 這個事件函數不被 wpWelcome、wpPreparing 和 wpInstalling 頁調用,還有安裝程序已經肯定要跳過的頁也不會調用 (例如,沒有包含組件安裝程序的 wpselectComponents)。
procedure CurPageChanged(CurPageID: Integer);
在新嚮導頁 (用 CurPageID 指定) 顯示後調用。
function CheckPassword(Password: String): Boolean;
若是安裝程序在 Pascal 腳本中發現 CheckPassword 事件函數,它自動顯示密碼頁並調用 CheckPassword 檢查密碼。返回 True 表示接受密碼,返回 False 拒絕。
要避免在編譯的安裝程序的 [code] 段內部貯存真實的密碼,你應該用其它無用的信息進行比較: 計算你本身密碼的 MD5 的無用信息,而後編譯到 GetMD5OfString(Password)。經過這種方法保護實際密碼值。
注意: 若是你已經用 CheckPassword 事件函數,而且你的用戶帶「/PASSWORD=」和「/SILENT」安裝命令行參數運行安裝程序,你的 CheckPassword 函數將在其它事件函數調用以前調用,包括 InitializeSetup。
function NeedRestart(): Boolean;
返回 True 告訴安裝程序提示用戶在安裝結束時從新啓動系統,False 則反之。
function updateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
若是安裝程序在 Pascal 腳本中發現 updateReadyMemo 事件函數,當準備安裝嚮導頁變爲激活頁時自動調用。它返回的文字顯示在準備安裝嚮導頁的備註註冊中,該文字是用 NewLine 參數換行的字符。參數空間包含一個帶安全可靠的字符。其它參數將包含安裝程序用於設置段的字符 (多是空的)。MemoDirInfo 參數包含象選擇目錄段的字符。
procedure RegisterPreviousData(PreviousDataKey: Integer);
要在自定義嚮導頁中貯存用戶輸入的設置,在 Pascal 腳本中放入一個 RegisterPreviousData 事件函數,並調用 SetPreviousData(PreviousDataKey, ...) 替換它,每一個設置一次。
function CheckSerial(Serial: String): Boolean;
如 果安裝程序在 Pascal 腳本中發現 CheckSerial 事件函數,將在用戶信息嚮導頁中自動出現一個序列號對象 (必須在你的 [Setup] 段中使用 UserInfoPage=yes!)。返回 True 表示接受序列號,返回 False 拒絕。當使用序列號時,請必定要記住,這個軟件無加密可言,何況 Inno Setup 源代碼是免費獲取的,它對於有經驗的人從安裝程序中刪除序列號保護並非很困難的事。使用這個只是方便用戶在你的應用程序中仔細檢查輸入的序列號 (貯存在 {userinfoserial} 常量)。
function GetCustomSetupExitCode: Integer;
返回一個非零值命令安裝程序返回一個自定義退出代碼。這個函數只在安裝程序運行完成而且退出代碼已經是零時調用。同時請查閱安裝退出代碼。
對於卸載程序,它們是:
function InitializeUninstall(): Boolean;
返回 False 中斷卸載,True 則反之。
procedure DeinitializeUninstall();
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
function UninstallNeedRestart(): Boolean;
返回 True 命令卸載程序提示用戶在卸載完成後從新啓動系統,False 則反之。
這裏是這些函數使用的常量列表:
CurStep values
ssInstall, ssPostInstall, ssDone
CurUninstallStep values
usAppMutexCheck, usUninstall, usPostUninstall, usDone
預約義嚮導頁 CurPageID values
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpselectDir, wpselectComponents, wpselectProgramGroup, wpselectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
這些函數不須要在 Pascal 腳本中出現。
腳本化常量
Pascal 腳本能夠包含當安裝程序想知道腳本化的 {code:...} 常量的值時調用的函數,調用的函數必須有 1 個名爲 Param 的字符串參數,而且必須返回一個字符串值。
{code:...} 常量語法是: {code:FunctionName|Param}
FunctionName 指定 Pascal 腳一函數的名字。
Param 指定用於函數的字符參數。若是你省略 Param,將使用一個空字符串。
如 果你想在常量內部包含一個逗號,垂直條(「|」),或括弧 (「}」),你必須經過「%-encoding」避開它。用「%」字符串替換該字符串,後面再跟隨它的兩位數的十六進制代碼。逗號是「%2c」,垂直條是 「%7c」,括弧是「%7d」。若是你想包含一個實際的「%」字符串,使用「%25」。
Param 能夠包含常量。請注意,你不須要將常量的括弧替換爲上面所說的結構;它只在別處使用時才須要替換。
示例:
DefaultDirName={code:MyConst}\My Program
這裏是一個包含上述使用的函數的 [code] 段的示例。[code]function MyConst(Param: String): String;
begin
Result := ExpandConstant('{pf}');
end;
若是經過 {code:...} 常量指定的函數不包含在 [code] 段,它必須是一個支持的函數。這是一個示例。
[INI]
FileName: "{app}\MyIni.ini"; Section: "MySettings"; Key: "ShortApp"; String: "{code:GetShortName|{app}}"
檢查參數
這裏是一個被全部段中被參數分開的條目支持的可選參數這就是:
Check
描述:
肯定是否被處理或不處理的檢查函數名。函數必須是一個 [code] 段中的自定義函數或支持函數。
除單一的名字外,你也可使用 boolean 表達式。披閱組件和任務參數獲取 boolean 表達式的詳細資料。
對於每一個檢查函數,能夠包含一個安裝程序用於檢查函數的逗號隔開的參數列表。容許的參數類型是字符串,整數和布爾數。字符串參數能夠包含常量。
這是一個能夠從參數列表內部調用的支持函數: ExpandConstant。
示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheck
Source: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck({app}\A)
Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck({app}\B)
全部檢查函數必須有一個布爾返回值。若是檢查函數 (或布爾表達式) 返回 True,那麼條目將被處理,不然跳過
安裝程序可能隨時調用檢查函數,即便只有一個條目使用檢查函數。若是你的函數執行一個長的代碼段,你能夠經過在全局變量中「緩衝」結果執行代碼來優化它。
若是安裝程序已經肯定不處理條目,那麼檢查函數不被調用。
這裏是上述使用的包含檢查函數的 [code] 段的示例。函數 DirExists 是支持函數,所以不包含在這個 [code] 段內。[code]
var
MyProgChecked: Boolean;
MyProgCheckResult: Boolean;
function MyProgCheck(): Boolean;
begin
if not MyProgChecked then begin
MyProgCheckResult := MsgBox('Do you want to install MyProg.exe to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes;
MyProgChecked := True;
end;
Result := MyProgCheckResult;
end;
function MyDirCheck(DirName: String): Boolean;
begin
Result := DirExists(DirName);
end;
BeforeInstall 和 AfterInstall 參數
這裏有兩個可選的被除 [Types]、[Components] 和 [Tasks] 以外的全部段中的那些分隔到參數中的條目支持的參數。它們是:
BeforeInstall
描述:
該函數名只在條目安裝以前調用一次。該函數必須是 [code] 段的自定義函數或一個支持函數。能夠包含一個安裝程序用於函數的逗號隔開的參數列表。容許的參數類型是字符、整數和布爾數。字符參數能夠包含常量。
這裏是一個能夠從參數列表內部調用的支持函數: ExpandConstant。
示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{-app}"; BeforeInstall: MyBeforeInstall
Source: "A\MYFILE.TXT"; DestDir: "{-app}"; BeforeInstall: MyBeforeInstall2('{-app}\A\MYFILE.TXT')
Source: "B\MYFILE.TXT"; DestDir: "{-app}"; BeforeInstall: MyBeforeInstall2('{-app}\B\MYFILE.TXT')
Source: "MYPROG.HLP"; DestDir: "{-app}"; BeforeInstall: Log('Before MYPROG.HLP Install')
AfterInstall
描述:
該函數名只在條目安裝以後調用一次。該函數必須是 [code] 段的自定義函數或一個支持函數。能夠包含一個安裝程序用於函數的參數。這個參數能夠包含常量。
示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{-app}"; AfterInstall: MyAfterInstall
Source: "A\MYFILE.TXT"; DestDir: "{-app}"; AfterInstall: MyAfterInstall2('{-app}\A\MYFILE.TXT')
Source: "B\MYFILE.TXT"; DestDir: "{-app}"; AfterInstall: MyAfterInstall2('{-app}\B\MYFILE.TXT')
Source: "MYPROG.HLP"; DestDir: "{-app}"; AfterInstall: Log('After MYPROG.HLP Install')
全部 BeforeInstall 和 AfterInstall 函數不須要有返回值。
若是安裝程序已經確認不處理條目,則不調用 BeforeInstall 或 AfterInstall 函數。
這裏是一個包含上述函數使用的 [code] 段示例,函數 Log 是一個支持函數,所以不包含在這個 [code] 段。[code]
procedure MyBeforeInstall();
begin
MsgBox('About to install MyProg.exe as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;
procedure MyBeforeInstall2(FileName: String);
begin
MsgBox('About to install ' + FileName + ' as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;
procedure MyAfterInstall();
begin
MsgBox('Just installed MyProg.exe as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;
procedure MyAfterInstall2(FileName: String);
begin
MsgBox('Just installed ' + FileName + ' as ' + CurrentFileName + '.', mbInformation, MB_OK);
end;
卸載代碼
Pascal 腳本也能夠包含卸載時調用的代碼。查看事件函數主題獲取更多信息。
當 設計在卸載時執行的代碼時,這是你所要知道的重要內容: 當彼此安裝多個版本的應用程序時,卸載時只運行一個 Pascal 腳本。通常來講,腳本從最近安裝的進行選擇。若是這樣,會卸載最新版本的應用程序,你最新版本的 Inno Setup 會被降級。類似狀況,當安裝較老版本的應用程序時,有可能會覆蓋新版本的應用程序。
當生成其它安裝程序的補丁安裝程序時,補丁安裝程序將與原始安 裝程序共享相同的卸載日誌 (就象 Uninstallable 設爲 yes 以及 AppId 設置爲與原始安裝程序相同),確保補丁包含與原始安裝程序完整的 [code] 段副本,不然,卸載時不會運行代碼。
但是,補丁安裝程序中 Uninstallable 設爲 no,那麼安裝程序不用知道現有的卸載程序或卸載日誌,在這種狀況下,補丁安裝程序不須要包含與原始安裝程序的 [code] 段副本。
示例
Pascal Scripting 示例腳本位於單獨的文件。打開 Inno Setup 安裝目錄下的「Examples」子目錄中的「Code*.iss」文件中的一個。
支持的函數參考
這裏是能夠從 Pascal 腳本內部調用的支持的函數列表。
安裝或卸載信息函數
function GetCmdTail: String;
function ParamCount: Integer;
function ParamStr(Index: Integer): String;
function ActiveLanguage: String;
function SetupMessage(const ID: TSetupMessageID): String;
function WizardDirValue: String;
function WizardGroupValue: String;
function WizardNoIcons: Boolean;
function WizardSetupType(const Description: Boolean): String;
function WizardselectedComponents(const Descriptions: Boolean): String;
function WizardselectedTasks(const Descriptions: Boolean): String;
function WizardSilent: Boolean;
function IsUninstaller: Boolean;
function UninstallSilent: Boolean;
function CurrentFileName: String;
function ExpandConstant(const S: String): String;
function ExpandConstantEx(const S: String; const CustomConst, CustomValue: String): String;
function IsComponentselected(const Components: String): Boolean;
function IsTaskselected(const Tasks: String): Boolean;
function ExtractTemporaryFile(const FileName: String);
function GetPreviousData(const ValueName, DefaultValueData: String): String;
function SetPreviousData(const PreviousDataKey: Integer; const ValueName, ValueData: String): Boolean;
function Terminated: Boolean;
排除函數
procedure Abort;
procedure RaiseException(const Msg: String);
function GetExceptionMessage: String;
procedure ShowExceptionMessage;
系統函數
function IsAdminLoggedOn: Boolean;
function IsPowerUserLoggedOn: Boolean;
函數必須有 1 個名爲 Param 的字符串參數,而且必須返回一個字符串值。
{code:...} 常量語法是: {code:FunctionName|Param}
FunctionName 指定 Pascal 腳一函數的名字。
Param 指定用於函數的字符參數。若是你省略 Param,將使用一個空字符串。
如 果你想在常量內部包含一個逗號,垂直條(「|」),或括弧 (「}」),你必須經過「%-encoding」避開它。用「%」字符串替換該字符串,後面再跟隨它的兩位數的十六進制代碼。逗號是「%2c」,垂直條是 「%7c」,括弧是「%7d」。若是你想包含一個實際的「%」字符串,使用「%25」。
Param 能夠包含常量。請注意,你不須要將常量的括弧替換爲上面所說的結構;它只在別處使用時才須要替換。
示例:
DefaultDirName={code:MyConst}\My Program
這裏是一個包含上述使用的函數的 [code] 段的示例。[code]function MyConst(Param: String): String;
begin
Result := ExpandConstant('{pf}');
end;
若是經過 {code:...} 常量指定的函數不包含在 [code] 段,它必須是一個支持的函數。這是一個示例。
[INI]
FileName: "{app}\MyIni.ini"; Section: "MySettings"; Key: "ShortApp"; String: "{code:GetShortName|{app}}"
檢查參數
這裏是一個被全部段中被參數分開的條目支持的可選參數這就是:
Check
描述:
肯定是否被處理或不處理的檢查函數名。函數必須是一個 [code] 段中的自定義函數或支持函數。
除單一的名字外,你也可使用 boolean 表達式。披閱組件和任務參數獲取 boolean 表達式的詳細資料。
對於每一個檢查函數,能夠包含一個安裝程序用於檢查函數的逗號隔開的參數列表。容許的參數類型是字符串,整數和布爾數。字符串參數能夠包含常量。
這是一個能夠從參數列表內部調用的支持函數: ExpandConstant。
示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheck
Source: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck({app}\A)
Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck({app}\B)
全部檢查函數必須有一個布爾返回值。若是檢查函數 (或布爾表達式) 返回 True,那麼條目將被處理,不然跳過。
string): Integer;
function Format1(const Format, S1: String): String;
function Format2(const Format, S1, S2: String): String;
function Format3(const Format, S1, S2, S3: String): String;
function Format4(const Format, S1, S2, S3, S4: String): String;
function Trim(const S: string): String;
function TrimLeft(const S: string): String;
function TrimRight(const S: string): String;
function StrToIntDef(s: string; def: Longint): Longint;
function StrToInt(s: string): Longint;
function IntToStr(i: Longint): String;
function CharLength(const S: String; const Index: Integer): Integer;
function AddBackslash(const S: String): String;
function RemoveBackslashUnlessRoot(const S: String): String;
function RemoveBackslash(const S: String): String;
function AddPeriod(const S: String): String;
function ExtractFileExt(const FileName: string): String;
function ExtractFileDir(const FileName: string): String;
function ExtractFilePath(const FileName: string): String;
function ExtractFileName(const FileName: string): String;
function ExtractFileDrive(const FileName: string): String;
function ExtractRelativePath(const BaseName, DestName: String): String;
function ExpandFileName(const FileName: string): String;
function ExpandUNCFileName(const FileName: string): String;
function GetDateTimeString(const DateTimeFormat: String; const DateSeparator, TimeSeparator: Char): String;
procedure SetLength(var S: String; L: Longint);
procedure CharToOemBuff(var S: String);
procedure OemToCharBuff(var S: String);
function GetMD5OfString(const S: String): String;
function SysErrorMessage(ErrorCode: Integer): String;
排列函數
function GetArrayLength(var Arr: Array): Longint;
procedure SetArrayLength(var Arr: Array; I: Longint);
文件系統函數
function DirExists(const Name: String): Boolean;
function FileExists(const Name: String): Boolean;
function FileOrDirExists(const Name: String): Boolean;
function FileSize(const Name: String; var Size: Integer): Boolean;
function GetSpaceOnDisk(const Path: String; const InMegabytes: Boolean; var Free, Total: Cardinal): Boolean;
function FileSearch(const Name, DirList: string): String;
function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;
function FindNext(var FindRec: TFindRec): Boolean;
procedure FindClose(var FindRec: TFindRec);
function GetCurrentDir: String;
function SetCurrentDir(const Dir: string): Boolean;
function GetWinDir: String;
function GetSystemDir: String;
function GetTempDir: String;
function GetShellFolder(Common: Boolean; const ID: TShellFolderID): String;
function GetShellFolderByCSIDL(const Folder: Integer; const create: Boolean): String;
function GetShortName(const LongName: String): String;
function GenerateUniqueName(Path: String; const Extension: String): String;
function GetVersionNumbers(const Filename: String; var VersionMS, VersionLS: Cardinal): Boolean;
function GetVersionNumbersString(const Filename: String; var Version: String): Boolean;
function IsProtectedSystemFile(const Filename: String): Boolean;
function GetMD5OfFile(const Filename: String): String;
文件函數
function Exec(function GetShellFolderByCSIDL(const Folder: Integer; const create: Boolean): String;
const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;
function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean;
function renameFile(const OldName, NewName: string): Boolean;
function ChangeFileExt(const FileName, Extension: string): String;
function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;
function deleteFile(const FileName: string): Boolean;
procedure DelaydeleteFile(const Filename: String; const Tries: Integer);
function LoadStringFromFile(const FileName: String; var S: String): Boolean;
function LoadStringsFromFile(const FileName: String; var S: TArrayOfString): Boolean;
function SaveStringToFile(const FileName, S: String; const Append: Boolean): Boolean;
function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;
function createDir(const Dir: string): Boolean;
function ForceDirectories(Dir: string): Boolean;
function RemoveDir(const Dir: string): Boolean;
function DelTree(const Path: String; const IsDir, deleteFiles, deleteSubdirsAlso: Boolean): Boolean;
function createShellLink(const Filename, Description, ShortcutTo, Parameters, WorkingDir, IconFilename: String; const IconIndex, ShowCmd: Integer): String;
procedure RegisterServer(const Filename: String; const FailCriticalErrors: Boolean);
function UnregisterServer(const Filename: String; const FailCriticalErrors: Boolean): Boolean;
procedure RegisterTypeLibrary(const Filename: String);
function UnregisterTypeLibrary(const Filename: String): Boolean
procedure IncrementSharedCount(const Filename: String; const AlreadyExisted: Boolean);
function DecrementSharedCount(const Filename: String): Boolean;
procedure RestartReplace(const TempFile, DestFile: String);
procedure UnregisterFont(const FontName, FontFilename: String);
function modifyPifFile(const Filename: String; const CloseOnExit: Boolean): Boolean;
註冊表函數
function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean;
function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;
function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;
function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean;
function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean;
function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal) Boolean;
function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean;
function RegdeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegdeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean;
function RegdeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;
INI 文件函數
function IniKeyExists(const Section, Key, Filename: String): Boolean;
function IsIniSectionEmpty(const Section, Filename: String): Boolean;
function GetIniBool(const Section, Key: String; const Default: Boolean; const Filename: String): Boolean
function GetIniInt(const Section, Key: String; const Default, Min, Max: Longint; const Filename: String): Longint;
function GetIniString(const Section, Key, Default, Filename: String): String;
function SetIniBool(const Section, Key: String; const Value: Boolean; const Filename: String):
Boolean;
function SetIniInt(const Section, Key: String; const Value: Longint; const Filename: String): Boolean;
function SetIniString(const Section, Key, Value, Filename: String): Boolean;
procedure deleteIniSection(const Section, Filename: String);
procedure deleteIniEntry(const Section, Key, Filename: String);
自定義安裝程序嚮導頁函數
function createInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage;
function createInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage;
function createInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;
function createInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage;
function createOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage;
function createOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption, AMsg: String): TOutputMsgMemoWizardPage;
function createOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage;
function createCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage;
function createCustomForm: TSetupForm;
function PageFromID(const ID: Integer): TWizardPage;
function ScaleX(X: Integer): Integer;
function ScaleY(Y: Integer): Integer;
對話框函數
function MsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons: Integer): Integer;
function SuppressibleMsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons, Default: Integer): Integer;
function GetOpenFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean;
function BrowseForFolder(const Prompt: String; var Directory: String; const NewFolderButton: Boolean): Boolean;
function ExitSetupMsgBox: Boolean;
COM 自動操做對象支持函數
function createOleObject(const ClassName: string): Variant;
function GetActiveOleObject(const ClassName: string): Variant;
安裝程序記錄函數
procedure Log(const S: String);
其它函數
procedure Sleep(const Milliseconds: LongInt);
function Random(const Range: Integer): Integer;
procedure Beep;
procedure BringToFrontAndRestore;
不建議使用的函數
function LoadDLL(const DLLName: String; var ErrorCode: Integer): Longint;
function CallDLLProc(const DLLHandle: Longint; const ProcName: String; const Param1, Param2: Longint; var Result: Longint): Boolean;
function FreeDLL(const DLLHandle: Longint): Boolean;
function castStringToInteger(var S: String): Longint;
function castIntegerToString(const L: Longint): String;
這裏是用於這些函數的常量列表:
CurStep 值
ssInstall, ssPostInstall, ssDone
CurPage 值
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpselectDir, wpselectComponents, wpselectProgramGroup, wpselectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
TMsgBoxType
mbInformation, mbConfirmation, mbError, mbCriticalError
MsgBox - 按鈕標記
MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL, MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_SETFOREGROUND
MsgBox - 返回值
IDOK, IDCANCEL, IDABORT, IDRETRY, IDIGNORE, IDYES, IDNO
TGetShellFolderID
sfDesktop, sfStartMenu, sfPrograms, sfStartup, sfSendTo, sfFonts, sfAppData, sfDocs, sfTemplates, sfFavorites, sfLocalAppData
Reg* - 根鍵值
HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_PERFORMANCE_DATA, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA,
HKCR, HKCU, HKLM, HKU, HKCC
TShouldProcessEntryResult
srNo, srYes, srUnknown
InstallOnThisVersion - 返回值
irInstall, irNotOnThisPlatform, irVerTooLow, irVerTooHigh, irInvalid
TSetupMessageID
用 'msg' + 消息名。 示例: SetupMessage(msgSetupAppTitle)
Exec 和 ShellExec - ShowCmd 值
SW_SHOW, SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_HIDE
支持的類參考
下 面是你能夠在 Pascal 腳本中使用的支持類的列表。也有兩個支持對象可用: 類型 MainForm: TMainForm,和類型 WizardForm: TWizardForm,以及一個特殊常量: 類型 crHand: TControl.Cursor。注意: MainForm 只在 WindowVisible 時可見。
注意: 你也能夠從 Borland 的 Delphi Visual Component Library (VCL) 幫助查找,下面的類主要是簡單地包裝 VCL 類在 Inno Setup 中使用。請查閱 http://info.borland.com/techpubs/delphi/ 和 ftp://ftp.borland.com/pub/delphi/techpubs/delphi3/d3cs.zip。
TObject = class
constructor create;
procedure Free;
end;
TPersistent = class(TObject)
procedure Assign(Source: TPersistent);
end;
TComponent = class(TPersistent)
function FindComponent(AName: string): TComponent;
constructor create(AOwner: TComponent);
property Owner: TComponent; read write;
procedure DESTROYCOMPONENTS;
procedure DESTROYING;
procedure FREENOTIFICATION(ACOMPONENT:TCOMPONENT);
procedure insertCOMPONENT(ACOMPONENT:TCOMPONENT);
procedure REMOVECOMPONENT(ACOMPONENT:TCOMPONENT);
property COMPONENTS[Index: INTEGER]: TCOMPONENT; read;
property COMPONENTCOUNT: INTEGER; read;
property COMPONENTINDEX: INTEGER; read write;
property COMPONENTSTATE: Byte; read;
property DESIGNINFO: LONGINT; read write;
property NAME: STRING; read write;
property TAG: LONGINT; read write;
end;
TStrings = class(TPersistent)
function Add(S: string): Integer;
procedure Append(S: string);
procedure AddStrings(Strings: TStrings);
procedure Clear;
procedure delete(Index: Integer);
function IndexOf(const S: string): Integer;
procedure insert(Index: Integer; S: string);
property Count: Integer; read;
property Text: String; read write;
property CommaText: String; read write;
property PixelsPerInch: Integer; read write;
property Style: TFontStyles; read write;
end;
TCanvas = class(TPersistent)
procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
procedure Draw(X, Y: Integer; Graphic: TGraphic);
procedure Ellipse(X1, Y1, X2, Y2: Integer);
procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: Byte);
procedure LineTo(X, Y: Integer);
procedure MoveTo(X, Y: Integer);
procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
procedure Rectangle(X1, Y1, X2, Y2: Integer);
procedure Refresh;
procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);
function TextHeight(Text: string): Integer;
procedure TextOut(X, Y: Integer; Text: string);
function TextWidth(Text: string): Integer;
property Handle: Integer; read write;
property Pixels: Integer Integer Integer; read write;
property Brush: TBrush; read;
property CopyMode: Byte; read write;
property Font: TFont; read;
property Pen: TPen; read;
end;
TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor);
TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame);
TPen = class(TGraphicsObject)
constructor create;
property COLOR: TCOLOR; read write;
property MODE: TPENMODE; read write;
property STYLE: TPENSTYLE; read write;
property WIDTH: INTEGER; read write;
end;
TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross);
TBrush = class(TGraphicsObject)
constructor create;
property COLOR: TCOLOR; read write;
property STYLE: TBRUSHSTYLE; read write;
end;
TGraphic = class(TPersistent)
procedure LoadFromFile(const Filename: string);
procedure SaveToFile(const Filename: string);
property Empty: Boolean; read write;
property Height: Integer; read write;
property Modified: Boolean; read write;
property Width: Integer; read write;
property OnChange: TNotifyEvent; read write;
end;
TBitmap = class(TGraphic)
procedure LoadFromStream(Stream: TStream);
procedure SaveToStream( Stream: TStream);
property Canvas: TCanvas; read write;
property Handle: HBITMAP; read write;
end;
TAlign = (alNone, alTop, alBottom, alLeft, alRight, alClient);
TControl = class(TComponent)
constructor create(AOwner: TComponent);
procedure BringToFront;
procedure Hide;
procedure Invalidate;
procedure refresh;
procedure Repaint;
procedure SendToBack;
procedure Show;
procedure update;
procedure SetBounds(x,y,w,h: Integer);
property Left: Integer; read write;
property Top: Integer; read write;
property Width: Integer; read write;
property Height: Integer; read write;
property Hint: String; read write;
property Align: TAlign; read write;
property ClientHeight: Longint; read write;
property ClientWidth: Longint; read write;
property ShowHint: Boolean; read write;
property Visible: Boolean; read write;
property Enabled: Boolean; read write;
property Hint: String; read write;
property Cursor: Integer; read write;
end;
TWinControl = class(TControl)
property Parent: TWinControl; read write;
property Handle: Longint; read write;
property Showing: Boolean; read;
property TabOrder: Integer; read write;
property TabStop: Boolean; read write;
function CANFOCUS:BOOLEAN;
function FOCUSED:BOOLEAN;
property CONTROLS[Index: INTEGER]: TCONTROL; read;
property CONTROLCOUNT: INTEGER; read;
end;
TGraphicControl = class(TControl)
end;
TCustomControl = class(TWinControl)
end;
TScrollBarKind = (sbHorizontal, sbVertical);
TScrollBarInc = SmallInt;
TCONTROLSCROLLBAR = class('TPersistent')
property KIND: TSCROLLBARKIND; read;
property SCROLLPOS: INTEGER; read
property MARGIN: WORD; read write;
property INCREMENT: TSCROLLBARINC; read write;
property RANGE: INTEGER; read write;
property POSITION: INTEGER; read write;
property TRACKING: BOOLEAN; read write;
property VISIBLE: BOOLEAN; read write;
end;
TScrollingWinControl = class(TWinControl)
procedure SCROLLINVIEW(ACONTROL:TCONTROL);
property HORZSCROLLBAR: TCONTROLSCROLLBAR; read write;
property VERTSCROLLBAR: TCONTROLSCROLLBAR; read write;
end;
TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin);
TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);
TBorderIcons = set of TBorderIcon;
TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter);
TCloseAction = (caNone, caHide, caFree, caMinimize);
TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction);
TCloseQueryEvent = procedure(Sender: TObject; var CanClose: Boolean);
TEShiftState = (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
TShiftState = set of TEShiftState;
TKeyEvent = procedure (Sender: TObject; var Key: Word; Shift: TShiftState);
TKeyPressEvent = procedure(Sender: TObject; var Key: Char);
TForm = class(TScrollingWinControl)
constructor createNEW(AOWNER:TCOMPONENT; Dummy: Longint);
procedure CLOSE;
procedure HIDE;
procedure SHOW;
function SHOWMODAL:INTEGER;
procedure RELEASE;
property ACTIVE: BOOLEAN; read;
property ACTIVECONTROL: TWINCONTROL; read write;
property BORDERICONS: TBorderIcons; read write;
property BORDERSTYLE: TFORMBORDERSTYLE; read write;
property CAPTION: STRING; read write;
property AUTOSCROLL: BOOLEAN; read write;
property COLOR: TCOLOR; read write;
property FONT: TFONT; read write;
property FORMSTYLE: TFORMSTYLE; read write;
property KEYPREVIEW: BOOLEAN; read write;
property POSITION: TPOSITION; read write;
property ONACTIVATE: TNOTIFYEVENT; read write;
property ONCLICK: TNOTIFYEVENT; read write;
property ONDBLCLICK: TNOTIFYEVENT; read write;
property ONdropDOWN: TNotifyEvent; read write;
property ONCLOSE: TCLOSEEVENT; read write;
property ONCLOSEQUERY: TCLOSEQUERYEVENT; read write;
property ONcreate: TNOTIFYEVENT; read write;
property ONDESTROY: TNOTIFYEVENT; read write;
property ONDEACTIVATE: TNOTIFYEVENT; read write;
property ONHIDE: TNOTIFYEVENT; read write;
property ONKEYDOWN: TKEYEVENT; read write;
property ONKEYPRESS: TKEYPRESSEVENT; read write;
property ONKEYUP: TKEYEVENT; read write;
property ONRESIZE: TNOTIFYEVENT; read write;
property ONSHOW: TNOTIFYEVENT; read write;
end;
TCustomLabel = class(TGraphicControl)
end;
TAlignment = (taLeftJustify, taRightJustify, taCenter);
TLabel = class(TCustomLabel)
property ALIGNMENT: TAlignment; read write;
property AUTOSIZE: Boolean; read write;
property CAPTION: String; read write;
property COLOR: TColor; read write;
property FOCUSCONTROL: TWinControl; read write;
property FONT: TFont; read write;
property WORDWRAP: Boolean; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
end;
TCustomEdit = class(TWinControl)
procedure CLEAR;
procedure CLEARselectION;
procedure selectALL;
property MODIFIED: BOOLEAN; read write;
property SELLENGTH: INTEGER; read write;
property SELSTART: INTEGER; read write;
property SELTEXT: STRING; read write;
property TEXT: string; read write;
end;
TBorderStyle = TFormBorderStyle;
TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase);
TEdit = class(TCustomEdit)
property AUTOselect: Boolean; read write;
property AUTOSIZE: Boolean; read write;
property BORDERSTYLE: TBorderStyle; read write;
property CHARCASE: TEditCharCase; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property HIDEselectION: Boolean; read write;
property MAXLENGTH: Integer; read write;
property PASSWORDCHAR: Char; read write;
property READONLY: Boolean; read write;
property TEXT: string; read write;
property ONCHANGE: TNotifyEvent; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
property ONKEYDOWN: TKeyEvent; read write;
property ONKEYPRESS: TKeyPressEvent; read write;
property ONKEYUP: TKeyEvent; read write;
end;
TCustomMemo = class(TCustomEdit)
property LINES: TSTRINGS; read write;
end;
TScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth);
TMemo = class(TMemo)
property LINES: TSTRINGS; read write;
property ALIGNMENT: TAlignment; read write;
property BORDERSTYLE: TBorderStyle; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property HIDEselectION: Boolean; read write;
property MAXLENGTH: Integer; read write;
property READONLY: Boolean; read write;
property SCROLLBARS: TScrollStyle; read write;
property WANTRETURNS: Boolean; read write;
property WANTTABS: Boolean; read write;
property WORDWRAP: Boolean; read write;
property ONCHANGE: TNotifyEvent; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
property ONKEYDOWN: TKeyEvent; read write;
property ONKEYPRESS: TKeyPressEvent; read write;
property ONKEYUP: TKeyEvent; read write;
end;
TCustomComboBox = class(TWinControl)
property dropPEDDOWN: BOOLEAN; read write;
property ITEMS: TSTRINGS; read write;
property ITEMINDEX: INTEGER; read write;
end;
TComboBoxStyle = (csdropDown, csSimple, csdropDownList, csOwnerDrawFixed, csOwnerDrawVariable);
TComboBox = class(TCustomComboBox)
property STYLE: TComboBoxStyle; read write;
property COLOR: TColor; read write;
property dropDOWNCOUNT: Integer; read write;
property FONT: TFont; read write;
property MAXLENGTH: Integer; read write;
property SORTED: Boolean; read write;
property TEXT: string; read write;
property ONCHANGE: TNotifyEvent; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
property ONKEYDOWN: TKeyEvent; read write;
property ONKEYPRESS: TKeyPressEvent; read write;
property ONKEYUP: TKeyEvent; read write;
end;
TButtonControl = class(TWinControl)
end;
TButton = class(TButtonControl)
property CANCEL: BOOLEAN; read write;
property CAPTION: String; read write;
property DEFAULT: BOOLEAN; read write;
property FONT: TFont; read write;
property MODALRESULT: LONGINT; read write;
property ONCLICK: TNotifyEvent; read write;
end;
TCustomCheckBox = class(TButtonControl)
end;
TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed);
TCheckBox = class(TCustomCheckBox)
property ALIGNMENT: TAlignment; read write;
property ALLOWGRAYED: Boolean; read write;
property CAPTION: String; read write;
property CHECKED: Boolean; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property STATE: TCheckBoxState; read write;
property ONCLICK: TNotifyEvent; read write;
end;
TRadioButton = class(TButtonControl)
property ALIGNMENT: TALIGNMENT; read write;
property CAPTION: String; read write;
property CHECKED: BOOLEAN; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
end;
TCustomListBox = class(TWinControl)
property ITEMS: TSTRINGS; read write;
property ITEMINDEX: INTEGER; read write;
property SELCOUNT: INTEGER; read;
property selectED[Index: INTEGER]: BOOLEAN; read write;
end;
TListBoxStyle = (lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable);
TListBox = class(TCustomListBox)
property BORDERSTYLE: TBorderStyle; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property MULTIselect: Boolean; read write;
property SORTED: Boolean; read write;
property STYLE: TListBoxStyle; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
property ONKEYDOWN: TKeyEvent; read write;
property ONKEYPRESS: TKeyPressEvent; read write;
property ONKEYUP: TKeyEvent; read write;
end;
TBevelShape = (bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine, bsRightLine,bsSpacer);
TBevelStyle = (bsLowered, bsRaised);
TBevel = class(TGraphicControl)
property SHAPE: TBEVELSHAPE; read write;
property STYLE: TBEVELSTYLE; read write;
end;
TCustomPanel = class(TCustomControl)
end;
TPanelBevel = (bvNone, bvLowered, bvRaised,bvSpace);
TBevelWidth = Longint;
TBorderWidth = Longint;
TPanel = class(TCustomPanel)
property ALIGNMENT: TAlignment; read write;
property BEVELINNER: TPanelBevel; read write;
property BEVELOUTER: TPanelBevel; read write;
property BEVELWIDTH: TBevelWidth; read write;
property BORDERWIDTH: TBorderWidth; read write;
property BORDERSTYLE: TBorderStyle; read write;
property CAPTION: String; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
end;
TNewStaticText = class(TWinControl)
property AUTOSIZE: BOOLEAN; read write;
property CAPTION: String; read write;
property COLOR: TColor; read write;
property FOCUSCONTROL: TWinControl; read write;
property FONT: TFont; read write;
property SHOWACCELCHAR: Boolean; read write;
property WORDWRAP: Boolean; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
end;
TNewCheckListBox = class(TCustomListBox)
function AddCheckBox(const ACaption, ASubItem: string; ALevel: Byte; AChecked, AEnabled, AHasInternalChildren, ACheckWhenParentChecked: Boolean; AObject: TObject): Integer;
function ADDGROUP(ACAPTION,ASUBITEM:STRING;ALEVEL:BYTE;AOBJECT:TOBJECT):INTEGER;
function AddRadioButton(const ACaption, ASubItem: string; ALevel: Byte; AChecked, AEnabled: Boolean; AObject: TObject): Integer;
property CHECKED[Index: INTEGER]: BOOLEAN; read write;
property STATE[Index: INTEGER]: TCHECKBOXSTATE; read write;
property ITEMENABLED[Index: INTEGER]: BOOLEAN; read write;
property ITEMLEVEL[Index: INTEGER]: BYTE; read;
property ITEMOBJECT[Index: INTEGER]: TOBJECT; read write;
property ITEMSUBITEM[Index: INTEGER]: STRING; read write;
property ALLOWGRAYED: BOOLEAN; read write;
property FLAT: BOOLEAN; read write;
property MINITEMHEIGHT: INTEGER; read write;
property OFFSET: INTEGER; read write;
property MULTIselect: BOOLEAN; read write;
property ONCLICKCHECK: TNOTIFYEVENT; read write;
property BORDERSTYLE: TBORDERSTYLE; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property SORTED: Boolean; read write;
property STYLE: TListBoxStyle; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
property ONKEYDOWN: TKeyEvent; read write;
property ONKEYPRESS: TKeyPressEvent; read write;
property ONKEYUP: TKeyEvent; read write;
property SHOWLINES: BOOLEAN; read write;
property WANTTABS: BOOLEAN; read write;
end;
TNewProgressBar = class(TWinControl)
property MIN: LONGINT; read write;
property MAX: LONGINT; read write;
property POSITION: LONGINT; read write;
end;
TRichEditViewer = class(TMemo)
property RTFTEXT: STRING; write;
property USERICHEDIT: BOOLEAN; read write;
end;
TPasswordEdit = class(TCustomEdit)
property AUTOselect: Boolean; read write;
property AUTOSIZE: Boolean; read write;
property BORDERSTYLE: TBorderStyle; read write;
property COLOR: TColor; read write;
property FONT: TFont; read write;
property HIDEselectION: Boolean; read write;
property MAXLENGTH: Integer; read write;
property Password: Boolean; read write;
property READONLY: Boolean; read write;
property TEXT: string; read write;
property ONCHANGE: TNotifyEvent; read write;
property ONCLICK: TNotifyEvent; read write;
property ONDBLCLICK: TNotifyEvent; read write;
property ONKEYDOWN: TKeyEvent; read write;
property ONKEYPRESS: TKeyPressEvent; read write;
property ONKEYUP: TKeyEvent; read write;
end;
TCustomFolderTreeView = class(TWinControl)
procedure ChangeDirectory(const Value: String; const createNewItems: Boolean);
procedure createNewDirectory(const ADefaultName: String);
property: Directory: String; read write;
end;
TFolderrenameEvent = procedure(Sender: TCustomFolderTreeView; var NewName: String; var Accept: Boolean);
TFolderTreeView = class(TCustomFolderTreeView)
property OnChange: TNotifyEvent; read write;
property Onrename: TFolderrenameEvent; read write;
end;
TStartMenuFolderTreeView = class(TCustomFolderTreeView)
procedure SetPaths(const AUserPrograms, ACommonPrograms, AUserStartup, ACommonStartup: String);
property OnChange: TNotifyEvent; read write;
property Onrename: TFolderrenameEvent; read write;
end;
TBitmapImage = class(TGraphicControl)
property AutoSize: Boolean; read write;
property BackColor: TColor; read write;
property Center: Boolean; read write;
property Bitmap: TBitmap; read write;
property ReplaceColor: TColor; read write;
property ReplaceWithColor: TColor; read write;
property Stretch: Boolean; read write;
end;
TNewNotebook = class(TWinControl)
function FindNextPage(CurPage: TNewNotebookPage; GoForward: Boolean): TNewNotebookPage;
property PageCount: Integer; read write;
property Pages[Index: Integer]: TNewNotebookPage; read;
property ActivePage: TNewNotebookPage; read write;
end;
TNewNotebookPage = class(TCustomControl)
property Color: TColor; read write;
property Notebook: TNewNotebook; read write;
property PageIndex: Integer; read write;
end;
TWizardPageNotifyEvent = procedure(Sender: TWizardPage);
TWizardPageButtonEvent = function(Sender: TWizardPage): Boolean;
WizardPage)
function Add(const ACaption: String): Integer;
function AddEx(const ACaption: StringTWizardPageCancelEvent = procedure(Sender: TWizardPage; var ACancel, AConfirm: Boolean);
TWizardPageShouldSkipEvent = function(Sender: TWizardPage): Boolean;
TWizardPage = class(TComponent)
property ID: Integer; read;
property Caption: String; read write;
property Description: String; read write;
property Surface: TNewNotebookPage; read write;
property SurfaceHeight: Integer; read write;
property SurfaceWidth: Integer; read write;
property OnActivate: TWizardPageNotifyEvent; read write;
property OnBackButtonClick: TWizardPageButtonEvent; read write;
property OnCancelButtonClick: TWizardPageCancelEvent; read write;
property OnNextButtonClick: TWizardPageButtonEvent; read write;
property OnShouldSkipPage: TWizardPageShouldSkipEvent; read write;
end;
TInputQueryWizardPage = class(TWizardPage)
function Add(const APrompt: String; const APassword: Boolean): Integer;
property Edits[Index: Integer]: TPasswordEdit; read;
property PromptLabels[Index: Integer]: TNewStaticText; read;
property SubCaptionLabel: TNewStaticText; read;
property Values[Index: Integer]: String; read write;
end;
TInputOptionWizardPage = class(T; const ALevel: Byte; const AExclusive: Boolean): Integer;
property CheckListBox: TNewCheckListBox; read;
property selectedValueIndex: Integer; read write;
property SubCaptionLabel: TNewStaticText; read;
property Values[Index: Integer]: Boolean; read write;
end;
TInputDirWizardPage = class(TWizardPage)
function Add(const APrompt: String): Integer;
property Buttons[Index: Integer]: TButton; read;
property Edits[Index: Integer]: TEdit; read;
property PromptLabels[Index: Integer]: TNewStaticText; read;
property SubCaptionLabel: TNewStaticText; read;
property Values[Index: Integer]: String; read write;
end;
TInputFileWizardPage = class(TWizardPage)
function Add(const APrompt, AFilter, ADefaultExtension: String): Integer;
property Buttons[Index: Integer]: TButton; read;
property Edits[Index: Integer]: TEdit; read;
property PromptLabels[Index: Integer]: TNewStaticText; read;
property SubCaptionLabel: TNewStaticText; read;
property Values[Index: Integer]: String; read write;
end;
TOutputMsgWizardPage = class(TWizardPage)
property MsgLabel: TNewStaticText; read;
end;
TOutputMsgMemoWizardPage = class(TWizardPage)
property RichEditViewer: TRichEditViewer; read;
property SubCaptionLabel: TNewStaticText; read;
end;
TOutputProgressWizardPage = class(TWizardPage)
procedure Hide;
property Msg1Label: TNewStaticText; read;
property Msg2Label: TNewStaticText; read;
property ProgressBar: TNewProgressBar; read;
procedure SetProgress(const Position, Max: Longint);
procedure SetText(const Msg1, Msg2: String);
procedure Show;
end;
TUIStateForm = class(TForm)
end;
TSetupForm = class(TUIStateForm)
procedure Center;
procedure CenterInsideControl(const Ctl: TWinControl; const InsideClientArea: Boolean);
end;
TMainForm = class(TSetupForm)
procedure ShowAboutBox;
end;
TWizardForm = class(TSetupForm)
property CANCELBUTTON: TBUTTON; read;
property NEXTBUTTON: TBUTTON; read;
property BACKBUTTON: TBUTTON; read;
property NOTEBOOK1: TNOTEBOOK; read;
property NOTEBOOK2: TNOTEBOOK; read;
property WelcomePage: TNewNotebookPage; read;
property InnerPage: TNewNotebookPage; read;
property FinishedPage: TNewNotebookPage; read;
property LicensePage: TNewNotebookPage; read;
property PasswordPage: TNewNotebookPage; read;
property InfoBeforePage: TNewNotebookPage; read;
property UserInfoPage: TNewNotebookPage; read;
property selectDirPage: TNewNotebookPage; read;
property selectComponentsPage: TNewNotebookPage; read;
property selectProgramGroupPage: TNewNotebookPage; read;html