湖南彩票|湖南彩票官网下载
當前位置: 首頁 > 其它資源 > 正文
Inno Setup 制作安裝包中一些常用的知識點 新手教程

Inno Setup 制作安裝包中一些常用的知識點 新手教程

作者:大眼仔~旭 日期:5年前 (2014-12-26) 圍觀:37243+ 評論:4 條

摘要:1、Inno Setup 是什么? Inno Setup 是一個免費的 Windows 安裝程序制作軟件。第一次發表是在 1997 年,Inno Setup 今天在功能設置和穩定性上的競爭力可能已經超過一些商業的安裝程序制作軟件。 Inno Setup 關鍵功能: ★ 支持現在所有正在使用的 32 位 Windows …

1、Inno Setup 是什么?

Inno Setup 是一個免費的 Windows 安裝程序制作軟件。第一次發表是在 1997 年,Inno Setup 今天在功能設置和穩定性上的競爭力可能已經超過一些商業的安裝程序制作軟件。

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)。
2、文檔約定
Windows 98/NT 4+ 這是“Windows 98,2000,XP,NT 4.0,Me 以及更高版本”的簡寫。
Windows NT 只要是 Windows NT 就可以,它包括 Windows 2000 和 XP (就是 NT 5),除非另外說明。
等寬文本 當你在幫助中看到等寬文本,它表示腳本在中輸入的引用的文字。

第二部分 怎么使用

1、創建安裝程序
安裝程序用編譯腳本的方式創建,腳本其實就是一個類似 .INI 文件格式的 ASCII 碼文本文件。 (它不象你想象的那么復雜!)
腳本用一個“.iss” (表示 Inno Setup Script) 的擴展名。腳本控制著安裝程序的所有方面。由它指定哪些文件將被安裝到什么地方,在哪里創建快捷方式,且被命名為什么。
腳本文件一般可以用安裝程序編譯器程序內置的編輯器進行編輯。在你編寫完腳本后,下一個最終步驟就是選擇安裝程序編譯器中的“編譯”。創建完成后,就可以運行根據你腳本編譯的安裝程序了。按默認,這個安裝程序創建在包含腳本文件目錄下的名為“輸出”目錄中。
如果你想看看它是怎樣工作的,啟動安裝程序編譯器,單擊“文件 | 打開”,并選擇位于 Inno Setup 安裝目錄下的 Samples 子目錄中的一個腳本文件。(你也可以將這些示例腳本作為你自己編寫腳本的模板。)

2、腳本格式概述
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:”作為前綴的場合中,在編譯器目錄中查找文件。

3、段中參數
所有腳本中的段,除 [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
如果你希望參數值是一個單個雙引號字符,用四個雙引號字符: “”””。外面的兩個用于包含引用的字符;內部兩個寫入單個的雙引號字符。

4、常量
腳本中的項目大部分可以嵌入常量。這些預定義的字符被包含在括弧 { } 中。安裝程序或卸載程序會根據用戶選擇和系統配置將這些常量翻譯為文字值。例如,{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 函數返回)。
5、公共參數
有三個可選的被所有段條目支持的參數,它們是:
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

6、組件和任務參數
這里有兩個可選的參數,被除 [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

7、安裝腳本段
[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”
8、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;

Inno setup 5.5.5 漢化增強版下載:點擊下載

聲明:大眼仔旭 | 本文采用[BY-NC-SA]協議進行授權
文章名稱:《Inno Setup 制作安裝包中一些常用的知識點 新手教程
文章固定鏈接:http://www.3x6.com.cn/inno-setup-tut.html
本站資源僅供個人學習交流,請于下載后 24 小時內刪除,不允許用于商業用途,否則法律問題自行承擔。
轉載聲明
全部評論: (4條)
  1. Alex2014-12-27 08:20 回復
    第一次打包用INNO,后來用了NSIS,現在一直用后者。感覺界面真心好看前者
  2. 飯特稀2014-12-29 09:37 回復
    說實話,一直也沒找到幾個簡單又好用,還稍微美觀點的打包軟件,所以搞來搞去還是InstallShield,買是買不起的,用的閹割版。。。
  3. Glass_Heart2015-06-16 16:42 回復
    大眼仔哥,2015年6月16日16:40:12,陰差陽錯 下載FastStoneCapture8.2 進入你的主頁了。 我如果早幾年找到這個主頁多好啊,大學就不會這么荒廢了。 不過現在也不晚,你的這些 教程 都是我想要的,謝謝 大眼哥 分享! 再次表達感謝!

發表評論

返回頂部
湖南彩票