Inno Setup 詳解中文資料
其一:使用教程
一、Inno Setup 是什么?
Inno Setup 是一個免費的 Windows 安裝程序制作軟件。第一次發表是在 1997 年,Inno Setup 今天在功能設置和穩定性上的競爭力可能已經超過一些商業的安裝程序制作軟件。
二、Inno Setup 能干什么?
1.支持現在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008, 2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服務包)。
2.廣泛支持在 64 位 的 Windows XP and Windows Server 2003 版本的操作系統中的 64 位應用程序安裝。支持 x64 和 Itanium 兩個結構。(在 Itanium 結構中,必須在 64 位模式安裝 Service Pack 1。)
3.支持創建單個 EXE 格式的安裝程序,使你的程序可以很方便地在網絡上發表。同時也支持磁盤延伸。
4.標准的 Windows 2000/XP 樣式向導界面。
5.定制安裝類型,例如:完整安裝,最小安裝,自定義安裝。
6.完整的卸載功能。
7.文件安裝:
包括完全的“壓縮”支持,bzip2 和 7-Zip LZMA 文件壓縮。安裝程序可以比較文件版本信息,替換正在使用的文件,使用共享文件計數,注冊 DLL/OCX 和類型庫,以及安裝字體。
8.可以在任意地方創建快捷方式,包括開始菜單和桌面。
9.創建注冊表 和 .INI 條目。
10.在安裝之前、之中或之后可運行其他程序。
11.支持多語言安裝。
12.支持密碼和加密安裝。
13.支持數字簽名 、安裝和卸載。
14.后台安裝和后台卸載。
15.Unicode 安裝。(Windows 2000/XP 或更高)
16.完整的 Pascal 腳本 引擎選項於運行期高級自定義安裝和卸載。
17.全部源代碼公開 (Borland Delphi 2.0-5.0 和 2009)。
二、創建安裝程序的方式:腳本
安裝程序用編譯腳本的方式創建,腳本其實就是一個類似 .INI 文件格式的 ASCII 碼文本文件。(它不象你想象的那么復雜!)。 Unicode Inno Setup支持 UTF-8 編碼文本文件。
腳本用一個“.iss”(表示 Inno Setup Script腳本) 的擴展名。腳本控制着安裝程序的所有方面。由它指定哪些文件將被安裝到什么地方,在哪里創建快捷方式,且被命名為什么。
腳本文件一般可以用安裝程序編譯器程序內置的編輯器進行編輯。在你編寫完腳本后,下一個最終步驟就是選擇安裝程序編譯器中的“編譯”。創建完成后,就可以運行根據你腳本編譯的安裝程序了。按默認,這個安裝程序創建在包含腳本文件目錄下的名為“輸出”目錄中。
如果你想看看它是怎樣工作的,啟動安裝程序編譯器,單擊“文件 | 打開”,並選擇位於 Inno Setup 安裝目錄下的 Examples 子目錄中的一個腳本文件。(你也可以將這些示例腳本作為你自己編寫腳本的模板。)
Inno setup腳本示范(注釋)
[Setup]
;程序名
AppName=ISsample
;版本號
AppVerName=ISsample 1.0.0.0
;發布者名
AppPublisher=Hkiss
;相關連接
AppPublisherURL=http://www.yan.com/
AppSupportURL=http://www.yan.com/
AppUpdatesURL=http://www.yan.com/
;默認安裝目錄
DefaultDirName={pf}\ISsample
;默認開始菜單名
DefaultGroupName=ISsample
;是否打開->可選安裝開始菜單項
;AllowNoIcons=yes
;安裝協議
;LicenseFile=C:\Example\原始文件\agreement.txt
;安裝前查看的文本文件
;InfoBeforeFile=C:\Example\原始文件\Setup_New.txt
;安裝后查看文本文件
;InfoAfterFile=C:\Example\原始文件\Setup_Old.txt
;輸出文件夾
OutputDir=C:\Example\InnoSetup\out
;輸出文件名
OutputBaseFilename=setup
;安裝圖標
SetupIconFile=C:\Example\原始文件\title.ico
;安裝需要輸入密碼
;Password=123
;Encryption=yes
;壓縮相關
Compression=lzma
SolidCompression=yes
;可以讓用戶忽略選擇語言相關
ShowLanguageDialog = yes
;備注版本信息
VersionInfoCompany=HTTP://www.Hkiss.COM
VersionInfoDescription=ISsample 漢化增強版
VersionInfoVersion=1.0.0.0
VersionInfoCopyright=Copyright (C) 2007-2008 Hkiss
;制作選擇語言
[Languages]
Name: "chs"; MessagesFile: "compiler:Default.isl" ;LicenSeFile :"C:\Example\原始文件\chs\agreement.txt"
Name: "en"; MessagesFile: "compiler:Languages\English.isl";LicenSeFile :"C:\Example\原始文件\en\agreement.txt"
;用戶定制任務
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "Tasks_1" ; Description:"用戶自定義任務1"; Flags: unchecked
Name: "Tasks_2" ; Description:"用戶自定義任務2"; Flags: unchecked
;選擇了組件才會出現的定制任務
Name: "Tasks_3" ; Description:"用戶自定義任務3";Components: c1 ; Flags: unchecked
;文件安裝
[Files]
;多語言安裝環境設置 公共參數Languages 來設置
Source: "C:\Example\原始文件\enfile.txt"; DestDir: "{app}"; Languages: en ; Flags: ignoreversion
Source: "C:\Example\原始文件\chsfile.txt"; DestDir: "{app}"; Languages: chs ; Flags: ignoreversion
;用戶自定義任務 Tasks
Source: "C:\Example\原始文件\Tasks\tasks_1.txt"; DestDir: "{app}\Tasks"; Flags: ignoreversion ;Tasks : Tasks_1
Source: "C:\Example\原始文件\Tasks\tasks_2.txt"; DestDir: "{app}\Tasks"; Flags: ignoreversion ;Tasks :Tasks_2
Source: "C:\Example\原始文件\Tasks\tasks_Components.txt"; DestDir: "{app}\Tasks"; Flags: ignoreversion ;Tasks :Tasks_2
;用戶定義組件安裝
Source: "C:\Example\原始文件\Components\Components_1.txt"; DestDir: "{app}\Components"; Flags: ignoreversion ; Components: a1;
Source: "C:\Example\原始文件\Components\Components_2.txt"; DestDir: "{app}\Components"; Flags: ignoreversion ; Components: a2;
Source: "C:\Example\原始文件\Components\Components_3.txt"; DestDir: "{app}\Components"; Flags: ignoreversion ; Components: a3;
Source: "C:\Example\原始文件\Components\Components_4.txt"; DestDir: "{app}\Components"; Flags: ignoreversion ; Components: a1 a2 a3;
;用戶注冊自定義Dll文件 regserver 注冊 noregerror 不顯示錯誤信息
Source: "C:\Example\原始文件\jmail.dll"; DestDir: "{app}"; Flags: ignoreversion regserver
;添加自述文件
Source: "C:\Example\原始文件\ISsample.txt"; DestDir: "{app}"; Flags: ignoreversion
;添加一個文件到緩存文件夾{Tmp} deleteafterinstall 安裝后刪除
Source: "C:\Example\原始文件\test.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall
Source: "C:\Example\原始文件\ISsample.chm"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Example\原始文件\ISsample.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Example\原始文件\ISsample.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Example\原始文件\ISsample.ini"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Example\原始文件\ISsample.rar"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Example\原始文件\ISsample_sys.dll"; DestDir: "{win}\System32"; Flags: ignoreversion
Source: "C:\Example\原始文件\log\*"; DestDir: "{app}\log"; Flags: ignoreversion recursesubdirs createallsubdirs
; 注意: 不要在任何共享系統文件上使用“Flags: ignoreversion”
;安裝類型設置
[Types]
Name: Full ;Description:"完全安裝"; Flags: iscustom
Name: Compact ;Description:"簡潔安裝";
Name: Custom; Description:"自定義安裝";
;組件安裝
[Components]
Name: c1; Description: "自定義任務3" ; Types: Full
Name: a1; Description: "安裝Components_1"; Types: Full Compact Custom ;
Name: a2; Description: "安裝Components_2"; Types : Full Compact
Name: a3; Description: "安裝Components_3"; Types : Full
;開始菜單,桌面快捷方式
[Icons]
Name: "{group}\ISsample"; Filename: "{app}\ISsample.exe"
Name: "{group}\{cm:ProgramOnTheWeb,ISsample}"; Filename: "http://www.yan.com/"
Name: "{group}\{cm:UninstallProgram,ISsample}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\ISsample"; Filename: "{app}\ISsample.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\ISsample"; Filename: "{app}\ISsample.exe"; Tasks: quicklaunchicon
;添加一個幫助文擋
Name: {group}\ISsample 1.0.0.0 幫助文檔;Filename: {app}\ISsample.chm
;用來在程序安裝完成后 在安裝程序顯示最終對話框之前執行程序 常用與運行主程序 顯示自述文件 刪除臨時文件
[Run]
Filename: "{app}\ISsample.exe"; Description: "{cm:LaunchProgram,ISsample}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\ISsample.txt"; Description: "查看顯示自述文件"; Flags: postinstall skipifsilent shellexec
;更改顯示在程序中顯示的消息文本
[Messages]
BeveledLabel=HKiss科技
;卸載對話框說明
ConfirmUninstall=您真的想要從電腦中卸載ISsample嗎?%n%n按 [是] 則完全刪除 %1 以及它的所有組件;%n按 [否]則讓軟件繼續留在您的電腦上.
;定義解壓說明
;StatusExtractFiles=解壓並復制主程序文件及相關庫文件...
;用與在用戶系統中創建,修改或刪除注冊表健值
[Registry]
Root: HKLM ;SubKey:"Software\ISsample";ValueType:dword;ValueName:config;ValueData:10 ;Flags:uninsdeletevalue
;在執行腳本
;注意:下面是code,因為與論壇使用的代碼標簽重名,改為了c0de,需要改回去。
[c0de]
//全局變量
var MyProgChecked: Boolean;
//判斷程序是否存在
//初始華程序事件
function InitializeSetup(): boolean;
var Isbl: boolean; //聲明變量
var Isstr: string;
begin //開始
Isbl := true; //變量賦值
Isstr := '歡迎';
if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\ISsample', 'config') then
begin
MsgBox('已安裝過,請先卸載在安裝',mbConfirmation, MB_OK);
isbl := false;
end else
begin
//MsgBox('無值',mbConfirmation, MB_OK);
isbl := true;
end;
//下面是個麻煩的 條件語句 end else 注意
//if MsgBox(Isstr, mbConfirmation, MB_OKCANCEL) = IDOK then
//begin
// isbl := true;
// MsgBox('執行了', mbConfirmation, MB_OK);
//end else
//begin
// isbl := false;
//MsgBox('執行了', mbConfirmation, MB_OK);
//end;
Result := Isbl;
end; //結束
procedure CurStepChanged(CurStep: TSetupStep);
var Isstr :string;
begin
if CurStep=ssInstall then //實際安裝前調用
begin
//MsgBox('CurStepChanged:實際安裝前調用', mbConfirmation, MB_OKCANCEL); //安裝完成后調用
end;
if CurStep=ssPostInstall then
begin
Isstr := ExpandConstant('{tmp}\tmp.rar');
// if FileExists(Isstr) then
// begin
// MsgBox('文件存在',mbConfirmation, MB_OK);
// end else
// begin
// MsgBox('文件不存在',mbConfirmation, MB_OK);
// end;
// MsgBox('CurStepChanged:實際安裝后調用', mbConfirmation, MB_OKCANCEL);
end;
end;
//下一步 按鈕按鈕 事件
function NextButtonClick(CurPageID: Integer): Boolean;
var ResultCode: Integer;
var IsSetup : Boolean;
begin
IsSetup := true ;
case CurPageID of
wpSelectDir:
MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardDirValue + '''.', mbInformation, MB_OK); //WizardDirValue路徑
wpSelectProgramGroup:
MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardGroupValue + '''.', mbInformation, MB_OK); //開始菜單名
wpReady:
begin
if not RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Test', 'config') then begin
if MsgBox('程序執行需要Test.ext,是否安裝!', mbConfirmation, MB_YESNO) = idYes then begin
ExtractTemporaryFile('test.exe');
if not Exec(ExpandConstant('{tmp}\test.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
MsgBox('Test.exe出錯:' #13#13 ' ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
end else begin
IsSetup := false ;
end ;
BringToFrontAndRestore();
end;
end;
end;
Result := IsSetup;
end;
三.腳本格式概述
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] 和 [Code] 段之外,包含的行中可有多個各自的參數。下列是 [Files] 段中的一個舉例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.CHM"; 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”。
在 64 位 Windows 中,按默認,the System32 path returned by this constant maps to the directory containing 32-bit system files, just like on 32-bit Windows. (This can be overridden by enabling 64 位模式.)
{syswow64}
在 64 位 Windows 中,系統的 SysWOW64 目錄,一般是“C:\WINDOWS\SysWOW64”。這是在 32 位系統文件駐留的真實目錄。在 32 位 Windows 中,32 位系統文件駐留在“System32”或“System”中,不是在單獨的的“ {syswow64}” 目錄,因此如果在這種情況下使用,這個常量將解析到與 {sys} 相同的目錄。
Do not use this constant unless you have a specific need to obtain the name of the actual directory in which 32-bit system files reside. Gratuitously using {syswow64} in places where {sys} will suffice may cause problems. (請查閱幫助文檔 [Files] 段 sharedfile 標記示例。)
{src}
安裝程序文件所在目錄。
例如: 你在項目中使用了 {src}\MYPROG.EXE,且用戶正在從“S:\”進行安裝,安裝程序將它傳送到“S:\MYPROG.EXE”。
{sd}
Windows 系統所在的驅動器。一般來說是“C:”。在 Windows NT 平台,這個目錄常量等同於 SystemDrive 環境變量。
{pf}
程序文件夾位置。系統的 Program Files 目錄的路徑。{pf} 等於 {pf32},除非安裝程序運行於 64 位模式,在這種情況下它等於 {pf64}。
{pf32}
32 位程序文件夾。系統的 32 位程序文件目錄路徑。一般來說它在 32 位 Windows 是“C:\Program Files”,在 64 位 Windows 中是“C:\Program Files (x86)”。
{pf64}
僅指 64 位 Windows: 64 位程序文件夾。系統的 64 位程序文件目錄路徑,一般來說是“C:\Program Files”。如果嘗試在 32 位的 Windows 中展開這個常量,將會出現異常。
{cf}
公共文件。系統公共文件目錄路徑。{cf} 等於 {cf32},除非安裝程序運行於 64 位模式,在這種情況下它等於 {cf64}。
{cf32}
32 位公共文件。系統的 32 位公共文件目錄路徑。一般來說它在 32 位 Windows 是“C:\Program Files\Common Files”,在 64 位 Windows 中是“C:\Program Files (x86)\Common Files”。
{cf64}
僅指 64 位 Windows: 64 位公共文件。系統的 64 位公共文件目錄路徑,一般來說是“C:\Program Files\Common Files”。如果嘗試在 32 位的 Windows 中展開這個常量,將會出現異常。
{tmp}
用於安裝程序或卸載程序的臨時目錄。這不是用戶的 TEMP 環境變量值。它是在安裝程序啟動后在用戶臨時目錄中創建的子目錄 (象名為“C:\WINDOWS\TEMP\IS-xxxxx.tmp”)。目錄中的所有文件和子目錄在安裝程序或卸載程序退出時刪除。在安裝時,這主要用於提取在 [Run] 段運行、但安裝后不再需要的文件。
{fonts}
字體目錄。通常是在 Windows 下面的名字“FONTS”的目錄。
{dao}
DAO 目錄,等同於 {cf}\Microsoft Shared\DAO。
{dotnet11}
32位 .NET Framework 版本 1.1 根目根。
如果所使用的系統上沒有 .NET Framework 版本 1.1,則顯示內部錯誤原因。
{dotnet20}
.NET Framework 版本 2.0 根目根。 {dotnet20} is equivalent to {dotnet2032} unless the install is running in 64位模式, in which case it is equivalent to {dotnet2064} .
如果所使用的系統上沒有 .NET Framework 版本 2.0,則顯示內部錯誤原因。
{dotnet2032}
32位 .NET Framework 版本 2.0 根目根。
如果所使用的系統上沒有 .NET Framework 版本 2.0,則顯示內部錯誤原因。
{dotnet2064}
僅64位Windows: 64位 .NET Framework 版本 2.0 根目根。
如果所使用的系統上沒有 .NET Framework 版本 2.0,則顯示內部錯誤原因。
外殼文件夾常量
Inno Setup 支持其它目錄常量設置,作為外殼文件夾常量引用。它們可以與其它目錄常量相同方法使用。
“common”常量引用到所有用戶配置文件。
下面的“user”常量引用到當前登錄的用戶配置文件進行安裝。This user is often not the same as the currently logged-in user, so use the "user" constants with caution.
除非有另外的注釋,外殼文件夾常量工作於 Inno Setup 支持的所有 Windows 版本,包括 Windows 95 和 NT 4.0。
* = 如果登錄的用戶缺少管理員權限,或操作系統是 Windwos 95/98/Me,“common”結構映射到“user”結構。
{group}
開始菜單文件夾路徑,由用戶在安裝程序的選擇開始菜單文件夾向導頁中選定。在 Windows NT/2000/XP/2003,這個文件夾總是創建在所有用戶配置文件下,除非非用戶安裝程序的用戶沒有管理員權限,這種情況下它將創建在用戶配置文件下。
{localappdata}
本地Application Data文件夾。
{sendto}
當前用戶的 Send To 文件夾路徑。(這里不是指公共 Send To 文件夾。)
{userappdata} & {commonappdata}
Application Data文件夾路徑。
{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/2003,是 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”。
Path 可以包含常量。注意,你不需要將常量中的括弧替換成上面所說的字符;上面所說的括弧后半部只在使用於其它地方時需要替換。
示例:
{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:HK xx \ 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 (默認設置) 時有效。
{sysuserinfoname}
{sysuserinfoorg}
Windows 已許可的名字和組織,這個信息從注冊表中讀取。
{userinfoname}
{userinfoorg}
{userinfoserial}
用戶在用戶信息向導頁 (可以通過 UserInfoPage 指令來啟用) 中分別輸入的名字,組織和序列號。一般來說,這些常量用於在 [Registry] 或 [INI] 條目中保存它們以后要使用的值。
{username}
正在運行安裝程序或卸載程序的用戶的名字 (也可以用 GetUserName 函數返回)。
{log}
日志文件的名稱,如果 logging 沒啟用則返回一個空字符。
創建腳本
段內參數
一些常量
公共參數
安裝腳本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它問題:
其它注意事項
在命令行執行編譯器
安裝命令行參數
文檔約定
"Windows 95/NT 4+"
這是 Windows 95, 98, NT 4.0, 2000 以及更高版本的簡稱。
"Windows 98/NT 4+"
這是 Windows 98, NT 4.0, 2000 以及更高版本的簡稱。
"Windows NT"
無論何時提及 Windows NT,除非有其他說明,他總是包括 Windows 2000(亦即 NT 5.0)。
等寬字體
當你看見文檔里的等寬字體,說明他是腳本文件的引用。
創建安裝程序
安裝程序是以腳本(script)的方式來創建的。(不要一看見“腳本”這個術語就害怕,你只需要花上幾分鍾的時間就可以掌握它的要領!)
該腳本文件的擴展名是“.iss”(意思是 Inno Setup Script)。腳本文件控制了安裝程序的每一個外觀界面。它指定了哪些文件要被復制及其位置,創建什么應用程序圖標和為它們命名等等。
腳本文件通常可以用安裝編譯程序內建的編輯器來創建和編輯,完成以后寫入腳本文件,下一步也是最后一步是在安裝編譯器的菜單里選擇“編譯”(Compile)。創建完成以后該干什么呢?准備運行這個基於該腳本的安裝程序吧!默認情況下,這個文件被創建在腳本文件所在文件夾的“OUTPUT”子文件夾下。
要了解腳本文件是如何工作的,運行安裝編譯器,單擊“文件\打開”選擇一個位於 Inno Setup 文件夾的 Samples 子文件夾下的示例腳本文件。(用這些示例文件作為你自己的腳本文件的模板可能示非常有用處的。)
參見
創建腳本
創建腳本
一個 Inno Setup 腳本是一個簡單的 ASCII 文本文件。它的格式非常類似於 .INI 文件,如果你有這方面的經驗你就會發現學習起來有多么的容易。
就象下面的示例所顯示的,腳本文件包括“段”(sections)和“項”(entries)。段名的兩邊始終有一對中括號“[]”,在 [Setup] 段中的每一項包括一個關鍵字和他的值,關鍵字和值用等於號“=”連接在一起。下面的這個示例說明了腳本文件是如何被組織的:
[在這里添加段名,例如 Setup]
這是一個關鍵字=這是一個值
這是其它的關鍵字=這是其它的值
[在這里添加段名,例如 Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
你也可以在你的腳本文件中加上注釋(這些注釋將會被安裝編譯器忽略),方法是在每一行注釋的行首加上一個分號“;”,例如:
; 這是一行注釋,我可以在這里寫上提醒我的內容...
參見
段內參數
一些常量
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
段內參數
腳本文件中的所有的段,除了[Setup],都是以行位單位,每行分為若干個參數。下面是一個 [Files] 段的示例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
每一個參數都有一個名稱,后面緊跟一個冒號,然后是它的值。除非有其它的說明,參數是可選的,如果參數沒有指定則取它們的默認值。如果一行內有多個參數則用分號將其分開 (還可以加一個空格符),他們可以按任何順序排列出來。
參數的值多數情況下是用引號擴起來("),但使用引號也是可選的。然而如果這個參數的值里面的前導符號或者后綴符號是空格的話就必須加上引號了。另外需要說明的是使用內嵌的分號和引號,要插入一個引號則使用兩個連續的引號來代替。例如,下面的示例:
"This "" contains "" embedded "" quotes"
""""
安裝程序編譯器將會視為:
This " contains " embedded " quotes
"
一些常量
多數的腳本項都可以在它們的內部嵌入“常量(constants)”,它們總是被一對大括號({ })擴起來的。當安裝程序被啟動的時候,這些常量將被轉換成其真實的值,這依賴於用戶的選擇和系統配置,例如,{win} 這個常量在絕大多數的系統當中將被轉換成“C:\WINDOWS”。
字符“{”被視為一個常量的起始標記,如果你想獲得的是它的真實字符,那么你必須使用兩個連續的“{”字符。
如果一個常量的后面緊跟着一個反斜杠,而此時這個常量被轉換成其真實值的結尾也是一個反斜杠時,Inno Setup 會自動的刪除一個反斜杠,這樣處理的明顯的好處是如果這個常量指向了“C:\”,{常量名}\file 就會被正確的轉換成“C:\file”而不是“C:\\file”。然而如果你想要防止這種事情的發生,那么就要將反斜杠用大括號括起來,象這樣:{app}{\}.
下面所列出的是目前已經被支持的常量。
目錄常量
{app}
應用程序目錄,這是用戶在安裝向導的選擇安裝目錄頁里面所選擇的。
例如:如果你使用了 {app}\MYPROG.EXE 作為一項並且用戶選擇了“C:\MYPROG”作為應用程序的目錄,那么安裝程序就會將它轉換成“C:\MYPROG\MYPROG.EXE”。
{win}
系統的 Windows 目錄。 例如:如果你使用了 {win}\MYPROG.INI 作為一項並且系統的 Windows 目錄是“C:\WINDOWS”,那么安裝程序就會將它轉換成“C:\WINDOWS\MYPROG.INI”。
{sys}
系統的 Windows 系統(System)目錄(在 Windows NT/2000 下是 System32)。 例如:如果你使用了 {sys}\CTL3D32.DLL 作為一項並且系統的 Windows 系統目錄是“C:\WINDOWS\SYSTEM”,那么安裝程序就會將它轉換成“C:\WINDOWS\SYSTEM\CTL3D32.DLL”。
{src}
這個文件夾指向安裝程序所在的位置。
例如:如果你使用了 {src}\MYPROG.EXE 作為一項並且用戶是從“S:\ ”安裝的,那么安裝程序就會將它轉換成“S:\MYPROG.EXE”。
{sd}
系統驅動器,它是指 Windows 被安裝到的那個驅動器,典型的是“C:”,對於 Windows NT/2000,這個常量同系統的環境變量“SystemDrive”是等效的。
{pf}
程序文件夾(Program Files),這個路徑是系統的 Program Files 目錄,典型的是“C:\Program Files”。
{cf}
公共文件夾(Common Files),這個路徑是系統的 Common Files 文件夾,典型的是“C:\Program Files\Common Files”。
{tmp}
臨時目錄,這個目錄並不是用戶的 TEMP 環境變量指向的目錄,而是安裝程序在啟動時在用戶的臨時目錄下建立的一個子目錄(它有一個類似於“
C:\WINDOWS\TEMP\IS-xxxxx.tmp”這樣的名字),在安裝程序退出時所有的文件和子目錄將會被刪除。對於在 [Run] 段里面要被執行且在安裝以后又不需要的程序文件來說這個功能是非常有用的。
{fonts}
字體目錄,在 Windows 95/NT 4+ 下有一個專門為字體設立的目錄(通常這個目錄在 Windows 目錄下且被命名為“FONTS”),這個常量就指向這個目錄。對於 Windows NT 3.51,這個常量是和 {sys} 等效的,因為當時還沒有字體目錄。
{dao}
DAO 目錄,當安裝程序運行在 Windows 95/NT 4+ 上時,它被等效為 {
cf}\Microsoft Shared\DAO,當運行於 Windows NT 3.51 時,它被等效為 {
win}\MSAPPS\DAO.
外殼(Shell)文件夾常量
Inno Setup 還支持另外一套目錄常量,這就是涉及到的外殼(shell)文件夾常量,它們具有和其它的目錄常量相同的使用方法。然而,如果在腳本的 [Setup] 段里面放入了 MinVersion=4,3.51 這一行來表示允許支持 NT 3.51,那么將只有 {group} 這個外殼文件夾常量能被使用,並簽只能用在 [Icons] 段。
下面的包含了“user”的常量涉及到當前登陸的用戶私人文檔(profile),而帶有“
common”的常量會涉及到全部用戶(All Users)的私人文檔(profile)。當安裝程序運行在 Windows NT/2000 操作系統下並且用戶不具有管理員的權限時,所有的帶有“common”的常量會強迫同帶有“user”的常量等效。
* 標記表示帶有“common”的常量在 Windows 9x 操作系統下同帶有“user”的常量等效。
{group}
程序組的路徑,取決於用戶在安裝程序向導的“選擇程序組”頁的選擇。對於 Windows NT,這個文件夾始終被建立在所有用戶的私人文檔(All Users profile),除非用戶正在安裝的這個應用程序不具有管理員的權限,那么在這種情況下它將被建立在用戶的私人文檔中(profile).
{sendto}
當前用戶的“發送”的路徑。(沒有公共的“發送”文件夾。)
{userappdata} & {commonappdata}
應用程序數據(Application Data)文件夾的路徑。
{userdesktop} & {commondesktop} *
桌面文件夾的路徑,推薦桌面快捷方式使用 {userdesktop}.
{userdocs} & {commondocs}
“我的文檔”文件夾的路徑(或者對於 NT 4.0,是指私人文件夾).
{userfavorites} & {commonfavorites}
“收藏夾”的路徑,這個常量的使用方法是需要 MinVersion 的設置至少為“4.1, 4”,目前只有 Windows 2000 支持 {commonfavorites},如果使用的是在這之前的版本的 Windows,那么它將會被轉換成和{userfavorites} 相同的目錄。
{userprograms} & {commonprograms} *
在開始菜單里面的程序文件夾的路徑。
{userstartmenu} & {commonstartmenu} *
開始菜單的定級路徑。
{userstartup} & {commonstartup} *
開始菜單里面的啟動文件夾的路徑。
{usertemplates} & {commontemplates}
模板(Templates)文件夾的路徑,目前只有 Windows 2000 支持 {
commontemplates},如果使用的是在這之前的版本的 Windows ,它將會被轉換成和 {usertemplates} 相同的目錄。
其他的常量
{\}
一個反斜杠字符,請參見本頁前面提到的關於常量 {\} 和單字符 \ 在使用上有何不同的說明。
{%NAME}
內嵌一個環境變量,這個 NAME 是要使用的環境變量的名字。如果在用戶的系統當中指定的環境變量不存在,這個常量就會被一個空的字符串所替代。
{computername}
安裝程序正在運行的計算機的名稱(就是“GetComputerName”函數的返回值)。
{groupname}
用戶在安裝程序向導的選擇程序組頁選擇的程序組的名稱,這個是不同於 {group} 的,它不包括路徑。
{hwnd}
(專門用途)傳送安裝程序背景窗口的窗口句柄。
{reg:HKxx\SubkeyName,ValueName|DefaultValue}
內嵌一個注冊表值。
HKxx 指定根鍵(root key),參見 [Registry] 段 文檔所列出的根鍵。
SubkeyName 指定要讀取的子鍵的名稱。
ValueName 指定要讀取的值的名稱,要讀取一個鍵的默認值就讓 ValueName 為空。
DefaultValue 如果指定的注冊表值不存在或者它不是一個字符串類型(REG_SZ 或者 REG_EXPAND_SZ),則嵌入這個值。
如果你希望包括一個逗號,豎線(字符“|”)或大括號閉弧“}”在常量里面,你必須通過“%-編碼” 形式用“%”后緊跟一個兩位的16進制代碼轉譯后替換原來的字符,一個逗號是“%2c”,一個豎線符是“%7c”,一個大括號閉弧是“%7d”。
DefaultValue 可以包括常量,然而,如上所訴內嵌的常量的大括號的閉弧
(“}”) 必須被改成“%7d”才可以。
{srcexe}
安裝程序的文件名全稱(包括全程路徑和文件名),例如“C:\SETUP.EXE”。
{username}
運行安裝程序的用戶的名稱(函數 GetUserName 的返回值)。
公共參數
有倆個可選的參數可以在所有的段里面的任何項中使用,它們是:
MinVersion
說明:
該項處理所需的分別最低的 Windows 版本和 Windows NT 版本. 如果將某個版本號指定為 0 那么在該平台上就再也不會處理這項了,版本創建編號(Build numbers)和(或)服務包級別(Service pack levels)也可以被包括在版本號當中。這個參數將會覆蓋位於 [Setup] 段當中的 MinVersion 關鍵字。
示例:
MinVersion: 4.0,4.0
OnlyBelowVersion
說明:
基本上是和 MinVersion 相反,該項所指定的最低的 Windows 版本 和 Windows NT
版本將不會被處理,例如:如果你指定了 4.1,5.0 並且用戶運行在 Windows 95 或 NT 4.0 下,那么該項將會被處理,但是如果用戶運行在 Windows 98 (報告的版本信息是 4.1)或 Windows 2000 (報告的版本信息是 NT 5.0),則該項就不會被處理。使用“0”表示該版本號上限的限制。版本創建編號(Build numbers)和(或)服務包級別(Service pack levels) 也可以包括在版本號當中。這個參數將會覆蓋位於 [Setup] 段當中的 OnlyBelowVersion 關鍵字。
示例:
OnlyBelowVersion: 4.1,5.0
其它注意事項
安裝程序是按照段內的排列順序來處理所有的項的,[UninstallRun] 段是個例外,卸載時處理所有項的順序是與安裝程序相反的。
在這個示例中:
[INI]
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesectionifempty
Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"; Flags: uninsdeleteentry
安裝程序首先記錄下第一項的數據 uninsdeletesectionifempty 標記到卸載記錄中。創建第二項的鍵,然后記錄下 uninsdeleteentry標記的數據到卸載記錄中,當程序被卸載時,卸載程序將首先處理 uninsdeleteentry 標記,刪除該項,然后才是 uninsdeletesectionifempty 標記。
如果安裝程序在用戶的系統中檢測到一個 Windows 共享版本,Windows 系統目錄是寫保護的,{sys} 目錄常量將會被轉變為用戶的 Windows 目錄替代系統目錄。
在命令行執行編譯器
腳本文件也可以在命令行被安裝編譯器編譯。命令行的使用方法如下:
compiler /cc <腳本文件>
示例:
compil16 /cc c:\isetup\sample16\sample16.iss
compil32 /cc "c:\isetup\sample32\my script.iss"
在上面列出的例子中,帶有空格的文件名必須用引號括起來。
在命令行運行安裝編譯器不支持正常的進程顯示或任何錯誤消息。如果編譯成功安裝編譯器將會返回一個退出代碼 0,如果是 1 則表示有無效的命令行參數, 2 則表明編譯失敗。
安裝命令行參數
安裝程序本身接受三個不同的可選的命令行參數,這些參數能被用於系統管理員和其他程序調用安裝程序。
/SP-
在安裝程序開始時禁止“即將安裝 ... ,繼續嗎?”的提示,當然,它將使 [Setup] 段的 DisableStartupPrompt 關鍵字設置為 yes 無效
/DIR="x:\dirname"
替換在“選擇目標文件夾”向導頁顯示的默認的目錄名,必需要指定一個全程路徑名。如果 [Setup] 段的 DisableDirPage 關鍵字被設置為 yes, 那么該命令行參數將被忽略。
/GROUP="group name"
替換在“選擇程序組”向導頁顯示的默認的程序組名,如果 [Setup] 段的 DisableProgramGroupPage 關鍵字被設置為 yes, 那么該命令行參數將被忽略。
安裝腳本段
安裝腳本段
[Setup] 段
[Dirs] 段
[Files] 段
[Icons] 段
[INI] 段
[InstallDelete] 段
[Messages] 段
[Registry] 段
[Run] 段
[UninstallDelete] 段
[UninstallRun] 段
其它問題:
其它注意事項
在命令行執行編譯器
安裝命令行參數
[Setup] 段
這個段包括了安裝和卸載程序所使用的全局設置,並且有些關鍵字在你建立的安裝程序中是必須要用到的。這個是 [Setup] 段的一個示例:
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
下面的這些關鍵字可以被放進 [Setup] 段中去:
(粗體字 表示是必需的)
編譯器相關
CompressLevel
DiskClusterSize
DiskSize
DiskSpanning
DontMergeDuplicateFilesOutputBaseFilename
OutputDir
ReserveBytes
SourceDir
UseSetupLdr
安裝程序相關
功能關鍵字: 這些關鍵字影響到安裝程序的操作,或是保存起來以備將來卸載時所用到。
AdminPrivilegesRequired
AllowNoIcons
AllowRootDirectory
AlwaysCreateUninstallIcon
AlwaysRestart
AlwaysUsePersonalGroup
AppName
AppId
AppMutex
AppPublisher
AppPublisherURL
AppSupportURL
AppUpdatesURL
AppVersion
AppVerName
ChangesAssociations
CreateAppDir
CreateUninstallRegKey
DefaultDirName
DefaultGroupName
DirExistsWarning
DisableAppendDir
DisableDirPage
DisableFinishedPage
DisableProgramGroupPage
DisableStartupPrompt
EnableDirDoesntExistWarning
ExtraDiskSpaceRequired
InfoAfterFile
InfoBeforeFile
LicenseFile
MessagesFile
MinVersion
OnlyBelowVersion
Password
Uninstallable
UninstallDisplayIcon
UninstallDisplayName
UninstallFilesDir
UninstallIconName
UninstallLogMode
UpdateUninstallAppName
UsePreviousAppDir
UsePreviousGroup
外觀界面關鍵字:這些關鍵字決定了安裝程序的外觀樣式。
AppCopyright
BackColor
BackColor2
BackColorDirection
BackSolid
WindowShowCaption
WindowStartMaximized
WindowResizable
WindowVisible
WizardImageBackColor
WizardImageFile
廢棄的
Bits
DisableDirExistsWarning
OverwriteUninstRegEntries
[Dirs] 段
這個段是可選的,而且通常對於大多數簡單的應用程序來書不是必需的。這個段是用來創建除用戶選擇的應用程序目錄以外的其它的附加的目錄,它是被自動創建的。這個段所創建的子目錄是可以脫離主應用程序而共同使用的目錄。當然在 [Files] 段里面的文件被復制到某個目錄之前你並不一定要創建它,然而在卸載程序的時候在 [Dirs] 和 [UninstallDelete] 段里面沒有指定的目錄就不會被刪除。
這是一個 [Dirs] 段的示例:
[Dirs]
Name: "{app}\data"
Name: "{app}\bin"
上面的示例演示了在安裝程序的應用程序目錄被創建之后,在應用程序的下面建立兩個子目錄。
下面列出了支持的參數:
Name (必需的)
說明:
要被建立的目錄的名稱,通常它以一個目錄常數開始。
示例:
Name: "{app}\MyDir"
Flags
說明:
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
deleteafterinstall
告訴安裝程序象平常一樣建立目錄,但是當安裝程序結束(或被中止)之后這個目錄是空的情況下將這個目錄刪除。如果釋放腳本的 [Run] 段所執行的程序所需要的臨時的數據時這個選項是很有用的。
uninsalwaysuninstall
告訴卸載程序試圖刪除這個目錄而不管它是不是空的。通常卸載程序只會嘗試刪除在安裝之前不存在的目錄。
uninsneveruninstall
告訴卸載程序不要去刪除這個目錄。在默認情況下,在 [Dirs] 段里面指定的目錄如果是空的卸載程序就會嘗試將其刪除。
示例:
Flags: uninsneveruninstall
公共參數
[Files] 段
這個段是可選的,但對於大多數安裝程序來說是必不可少的。在這里定義了安裝程序需要復制到用戶的系統當中的全部文件。
在安裝期間,卸載程序和數據被自動的復制到應用程序的目錄當中去,因此你不必手工的將它們添加到 [Files] 段。
這是一個 [Files] 段的示例:
[Files]
Source: "CTL3DV2.DLL"; DestDir: "{sys}"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Source: "MYPROG.EXE"; DestDir: "{app}"
Source: "MYPROG.HLP"; DestDir: "{app}"
Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
下面列出了支持的參數:
Source (必需的)
說明:
“源文件”的名稱,如果沒有提供全程路徑時編譯器會根據安裝程序的源目錄的路徑預先設定號路徑。
允許通配符,根據通配符可以在一項里面簡單的指定一組文件。當使用了通配符的時候,所有匹配的文件使用相同的可選項。
當標記(flag) external 被指定的時候,Source 必須是一個在發布介質或用戶的系統中已經存在的文件(或帶有通配符)的全程路徑。(例如“{src}\license.ini”).
示例:
Source: "MYPROG.EXE"
DestDir (必需的)
說明:
這個是文件將要被安裝到用戶的系統當中去的目錄。它幾乎總是以一個目錄常量開始的。如果指定的路徑不存在於用戶的系統中,它將會被自動的創建。
示例:
DestDir: "{app}"
DestName
說明:
這個常數為將要安裝到用戶的系統中的文件指定一個新的名字。在默認的情況下,安裝程序使用的是同 Source 參數一樣的文件名,因此在多數情況下不需要指定該參數。
示例:
DestName: "MYPROG2.EXE"
CopyMode
默認:
normal
說明:
“復制模式”,指定文件復制的規則,必須是下列規則之一。
normal
這是最常使用的選項。如果文件已經存在於用戶的系統當中並且比要復制的文件的版本更新時(由文件的版本信息決定),安裝程序將會向用戶提出詢問是否要替換掉已經存在的文件。如果已經存在的文件不包含文件的版本信息,它將會被覆蓋而不會向用戶詢問。
參見這個標題下面的注意中關於版本檢查的重要說明。
onlyifdoesntexist
只有當用戶的系統中的文件不存在時才復制文件。
alwaysoverwrite
總是覆蓋已經存在的文件,甚至如果已經存在的文件比被安裝的文件的版本更新的情況下也是如此。對於共享的系統文件永遠也不要這樣做!
alwaysskipifsameorolder
類似於 normal, 不同之處是如果遇到已經存在的文件不會向用戶提出詢問。當這個模式被使用時,更新的一經存在的文件時從來不會被替換的。
示例:
CopyMode: normal
Attribs
說明:
為文件指定附加的“屬性”,它可以包括一個或多個屬性,它們是:readonly, hidden, system. 如果沒有指定這個參數,安裝程序不會給文件指派任何特殊的屬性。
示例:
Attribs: hidden system
FontInstall
說明:
告訴安裝程序需要被安裝的文件是一個字體文件,該值是被保存到注冊表或 WIN.INI 文件中的字體名稱,這個名稱必須嚴格地和在資源管理器中雙擊字體文件看到的名稱相對應。注意,安裝程序會自動的在字體名稱的末尾加上“(TrueType)”。
如果這個字體文件不是一個 TrueType 字體,你必須在 Flags 參數中指定 fontisnttruetype 標記。
建議在安裝字體到 {fonts} 目錄的時候使用復制模式參數 onlyifdoesntexist 和標記(flag)參數 uninsneveruninstall.
示例:
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall
Flags
說明:
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
comparetimestampalso
(專門用途) 如果要被復制到用戶系統的文件已經存在於用戶的系統當中並且它們具有相同的版本信息,告訴安裝程序進行時間戳(文件的日期時間屬性)的比較。 在正常情況下安裝程序不會覆蓋已經存在的文件,但是當使用了這個標記的時候, 如果已存在的文件的時間戳比它的版本信息還要舊,安裝程序在安裝文件時就會覆蓋它。當復制模式不是 normal 或 alwaysskipifsameorolder 這兩者之一時該標記不起作用。
confirmoverwrite
當文件已經存在每個文件在復制之前始終向用戶提出詢問。
deleteafterinstall
告訴安裝程序象平常一樣復制文件,但是當安裝程序結束(或被中止)之后將這個文件刪除。如果釋放腳本的 [Run] 段所執行的程序所需要的臨時的數據時這個選項是很有用的。
此標記不能和下列標記在一起組合使用: isreadme, regserver, regtypelib, restartreplace, sharedfile, uninsneveruninstall.
external
此標記告訴 Inno Setup 不要將由 Source 參數指定的文件編譯進安裝程序文件中,在復制文件的時候由發布介質或用戶的系統中已經存在文件代替。要獲得更多詳細的信息請參見 Source 參數的說明。
fontisnttruetype
如果 FontInstall 參數指定的是一個 非 TrueType 字體則使用此標記。
isreadme
該文件是“自述(README)”文件,安裝程序中只有一個文件能夠使用此參數。當有一個文件使用了這個參數時,用戶將被詢問是否願意在安裝程序結束時查看自述文件,如果選擇了是,安裝程序將會根據文件的類型用默認的程序打開這個文件,基於這個原因,自述文件應該具有象 .txt, .wri 或 .doc. 這樣的擴展名。
注意如果安裝程序要重新啟動用戶的計算機(比如安裝了一個帶有 restartreplace 參數的文件或在 [Setup] 段中的 AlwaysRestart
關鍵字的值為 yes),安裝程序就不會向用戶詢問是否要查看自述文件。
overwritereadonly
始終覆蓋一個只讀 (read-only) 文件,如果沒有這個參數,當一個已存在的只讀文件要被覆蓋時安裝程序將會詢問用戶。
regserver
注冊 OLE 服務器 (或稱作 ActiveX 控件)。如果設置了此標記,安裝程序將查找並執行 DLL/OCX 的 DllRegisterServer 輸出,卸載程序調用 DllUnregisterServer. 當結合 sharedfile 標記一起使用,只有參照技術器的值歸零時 DLL/OCX 才可能百取消登記 (unregistered).
要獲得更多的詳細信息請參見此標題最后的 注意。
regtypelib
注冊類型庫 (.tlb). 卸載程序將會取消注冊類型庫 (除非指定了 uninsneveruninstall 標記). 就像 regserver 標記那樣,如果結合 sharedfile 標記一起使用,這個文件只有參照計數器的值歸零時才可能被卸載。
要獲得更多的詳細信息請參見此標題最后的 注意。
restartreplace
此標記通常用於替換系統核心文件。如果文件已經預先存在並發現它已經被鎖定結果導致安裝程序無法替換該文件,安裝程序就會注冊此文件(對於 Windows 和 Windows NT 分別使用 WININIT.INI 和函數 MoveFileEx)在下次啟動系統時被替換。當遇到這種情況,在安裝過程結束時用戶將被提示重新啟動計算機。
要保持 Windows95/98 和 3.1 的兼容性,使用了此標記的項不應該使用長文件名,只能支持“8.3”格式的文件名。(Windows NT 和 2000 則沒有此限制。)
重要提示:在 Windows NT/2000 下只有當用戶具有管理員權限時使用 restartreplace 標記才可以成功的替換使用中的文件。如果用戶沒有管理員權限,將會顯示如下的信息:“RestartReplace failed: MoveFileEx failed; code 5.”,因此,當使用 restartreplace 標記時強烈建議讓你的安裝程序需要管理員權限,在 [Setup] 段里面設置 "AdminPrivilegesRequired=1"。
sharedfile
(僅 Windows 95/NT 4+) 使用 Windows 的共享文件計數功能 (位於注冊表的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs). 這樣會使應用程序之間能夠共享一個文件,不用擔心在不注意的情況下會刪除文件。在每次安裝共享文件的時候,與這個文件相對應的“參照計數器”的值就會加一,而每次應用程序被卸載的時候,參照計數器的值就會減一,如果參照計數器的值歸零的時候,該共享文件就會被刪除(在用戶確認的情況下)。
絕大多數被安裝到 Windows 系統目錄下的文件都應當使用這個標記,包括 .OCX 和 .DPL (Delphi 3 package) 文件。不使用這個標記的僅有的一個例外是 MFC DLLs. 作為替代,應該在復制模式中使用 onlyifdoesntexist ,並結合 uninsneveruninstall 標記,或者是如果安裝單獨發布的 MFC DLL 的最近的版本,則使用復制模式 alwaysskipifsameorolder ,並結合使用標記 uninsneveruninstall 和 restartreplace.
當安裝程序被運行在一個 NT 3.51 系統時,被安裝的帶有此標記的文件就再也不會被刪除了。
skipifsourcedoesntexist
只有當 external 標記也使用了的時候這個標記才會有用。它會告訴安裝程序如果源文件不存在的話則無任何提示的(靜靜的)跳過該項,如果沒有使用這個標記則會顯示一個錯誤消息。
uninsneveruninstall
從來不會卸載這個文件。此標記應當被保守地使用,而且通常它是和復制模式 onlyifdoesntexist 在一起結合使用。意思是用於安裝一個特別公共的共享文件,就像 CTL3DV2.DLL 或者一個 MFC DLL, 你不應該用卸載程序去刪除這個文件的原因是以后其它的應用程序也要使用到它。
示例:
Flags: isreadme
公共參數
注意
如果安裝程序正在安裝一個已經存在於用戶的系統當中的 16 位的 DLL 或者 EXE 文件,兩個文件的版本信息是不會相比較的,已存在的文件將始終被覆蓋(除非當復制模式的參數是 onlyifdoesntexist),這是由一個 Windows 的限制決定的,32 位的程序就像 Inno Setup 只能讀取 32 位可執行文件的版本信息。
在安裝程序的最后一步安裝程序會注冊所有的帶有 regserver 或 regtypelib 標記的文件。然而,如果 [Setup] 段關鍵字 AlwaysRestart 的值是 yes, 或如果有文件帶有 restartreplace 標記,全部的文件將會在下次啟動的時候注冊(在 Windows 注冊表的 RunOnce 創建一項)。
當帶有 .HLP 擴展名(Windows 的幫助文件)的文件被卸載的時候,其對應的 .GID 和 .FTS 文件同樣會被自動刪除。
[Icons] 段
這個段是可選的,但對於大多數安裝程序來說是必不可少的。它定義了所有的安裝程序要在用戶系統中創建的程序管理器/開始菜單的圖標。它也能被用來在其它的位置創建應用程序圖標(快捷方式),比如就像桌面。
卸載圖標是由安裝程序內部創建的,這樣一來你就不需要在 [Icons] 段里面手工的添加它。默認情況下,安裝程序運行在 Windows 95/NT 4+ 的時候是不創建卸載圖標的 ――除了安裝程序運行於 Windows NT 3.51 的時候。 要強制創建一個卸載圖標,請使用 [Setup] 段里面的 AlwaysCreateUninstallIcon 關鍵字。
這是 [Icons] 段的一個示例:
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}"
下面列出了支持的參數:
Name (必需的)
說明:
要創建的應用程序圖標的名稱和位置。此參數可以使用任何任何“外殼文件夾常量”和“目錄常量”。
注意: 記住 Windows 95/NT 4+ 的應用程序圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程序圖標的名稱。
示例:
Name: "{group}\My Program"
Name: "{group}\Subfolder\My Program"
Name: "{userdesktop}\My Program"
Name: "{commonprograms}\My Program"
Filename (必需的)
說明:
應用程序圖標的命令行文件名,它通常以一個目錄常量開始。
示例:
Filename: "{app}\MYPROG.EXE"
Parameters
說明:
應用程序圖標的可選的命令行參數,可以包括常量,在 Windows 95/NT 4+ 下運行時才可以包括引號。
示例:
Parameters: "/play filename.mid"
WorkingDir
說明:
應用程序圖標的工作目錄,應用程序啟動的那個目錄,如果沒有指定該參數或該參數是空的,Windows 將使用一個默認的路徑,它隨着 Windows 的版本的不同而改變。這個參數可以包括常量。
示例:
WorkingDir: "{app}"
Comment
說明:
指定快捷方式的“注釋”(或“描述”)欄的內容,它決定了在 Windows 2000 下的彈出信息,早期的 Windows 版本忽略這個注釋。
示例:
Comment: "This is my program"
IconFilename
說明:
要被顯示的一個自定義的應用程序圖標(位於用戶的系統中)的文件名。它可以是一個包含圖標的可執行文件映像 (.exe, .dll) 或一個 .ico 文件。如果沒有指定該參數或該參速是空的,Windows 將會使用文件的默認圖標。這個參數可以包括常量。
示例:
IconFilename: "{app}\myicon.ico"
IconIndex
默認:
0
說明:
由 IconFilename 指定的文件的以零開始的圖標索引。
示例:
IconIndex: 0
Flags
說明:
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
closeonexit
當設置了此標記時,安裝程序將設置快捷方式的“退出時關閉”屬性。這個標記僅對基於 MS-DOS 的應用程序有效 (具體說就是是否具有 .pif 擴展名)。如果這個標記和 dontcloseonexit 標記都沒有指定,安裝程序就不會去改變“退出時關閉”的屬性。
createonlyiffileexists
當設置了此標記時,安裝程序只創建已存在的由 Filename 參數指定的文件的應用程序圖標。
dontcloseonexit
類似於 closeonexit, 只是會導致安裝程序不選定“退出時關閉”屬性。
runmaximized
當設置了此標記時,安裝程序將應用程序圖標的“運行方式”設置為“最大化”,這樣當程序被啟動時以最大化的模式初始化。當安裝在 Windows NT 3.51 上時該標記不起作用。
runminimized
當設置了此標記時,安裝程序將應用程序圖標的“運行方式”設置為“最小化”,這樣當程序被啟動時以最小化的模式初始化。
uninsneveruninstall
告訴卸載程序不要刪除這個應用程序圖標。
useapppaths
當設置了此標記時,在 Filename 參數里僅指定沒有路徑的文件名,以后安裝程序將會從注冊表的 "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 (必需的)
說明:
要被創建的段的名稱,可以包括常量。
示例:
Section: "Settings"
Key
說明:
要被設定的鍵的名稱,可以包括常量。如果沒有指定這個參數或這個參數是空的就不會創建任何鍵。
示例:
Key: "Version"
String
說明:
賦給鍵的值,可以使用常量。如果沒有指定該參數不會創建該鍵。
示例:
String: "1.0"
Flags
說明:
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
createkeyifdoesntexist
只有該鍵不存在是才能給改建賦值。
uninsdeleteentry
程序被卸載時刪除該項,它可以結合 uninsdeletesectionifempty 標記一起使用。
uninsdeletesection
當程序被卸載時,刪除該項所在的整個段。對於由 Windows 本身使用的段(例如一些在 WIN.INI 中的段)來說這明顯不是一個好的主意,你應當將它用到自己的應用程序中的段。
uninsdeletesectionifempty
類似於 uninsdeletesection, 但是只能在該段中沒有了鍵的時候才能刪除。它可以結合 uninsdeleteentry 標記一起使用。
示例:
Flags: uninsdeleteentry
公共參數
[InstallDelete] 段
它使用的是和 [UninstallDelete] 段相同的格式,不同的是它是在安裝程序的第一步被處理的。
[Messages] 段
[Messages] 段是用於定義安裝程序和卸載程序所顯示的消息。通常你不需要在你的腳本文件里面創建 [Messages] 段,默認情況下所有的顯示消息都由 Inno Setup 包含的文件 Default.isl 定義。 (或由 [Setup] 段的關鍵字 MessagesFile 指定的任何文件).
然而,單獨的消息可以被你的腳本中創建的 [Messages] 段覆蓋。要這么做,首先你需要知道你要改變的消息的標識 (ID),在搜索 Default.isl 文件時能很容易的發現。例如,你想要改變安裝向導的按鈕 “下一步(&N)” 為 “向前(&F)”,該消息的標識為“ButtonNext”,那么你應該象這樣創建 [Messages] 段:
[Messages]
ButtonNext=&Forward >
有些消息帶有象 %1 和 %2 這樣的參數,你可以重新排列參數的順序(例如將 %2 移到 %1 的前面)並且如果需要的話可以重復使用參數(例如“
%1 ... %1 %2”)。在帶有參數的消息中,使用兩個連續的“%”代替一個嵌入的“%”,“%n”創建一個換行。
如果你希望將 Inno Setup 的文本翻譯成其他語言修改並替換文件 Default.isl 或在你創建的腳本里面覆蓋每個消息,做一個 Default.isl 的副本並另起一個名字就像 MyTranslation.isl. 在你要使用 MyTranslation.isl 的任何安裝程序中,簡單的將 [Setup] 段中的關鍵字 MessagesFile 指向該文件。
特殊用途的標識
有幾個 [Messages] 段的項實際上不是用於在屏幕上顯示的,它們是用於在安裝程序中指定所使用的字體和字型號的。這些可選項中的每一個都有一個前導下划線字符 (“_”) 開始,請參閱 Default.isl 文件頭部的注釋的使用方法示例。
[Registry] 段
這個段是可選的,他定義了一些注冊表項,用於在復制完文件之后創建在用戶的系統中。
下面是 [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 上,但是也支持 Windows 95/98.
如果指定了 multisz,安裝程序將創建一個多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword,安裝程序將創建一個整數 (REG_DWORD) 值。
如果指定了 binary,安裝程序將創建一個二進制 (REG_BINARY) 值。
示例:
ValueType: string
ValueName
說明:
要創建的鍵值的名稱,可以包含常量。如果它是空的,將會寫入“默認”(Default)值中。如果ValueType 參數被設置為 none, 該參數將被忽略。
示例:
ValueName: "Version"
ValueData
說明:
鍵值的數據。如果 ValueType 參數是 string, expandsz 或 multisz, 該參數是一個可以包含常量的字符串。如果數據類型是 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} 的常量來嵌入換行(nulls)。
示例:
ValueData: "1.0"
Flags
說明:
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
createvalueifdoesntexist
當指定了此標記時,只有當相同名稱的鍵值不存在時安裝程序才會創建該鍵值。如果數據類型是 none ,或者同時指定了 deletevalue 標記將忽略該標記。
deletekey
當指定了此標記時,如果該項已存在,安裝程序會首先嘗試去刪除它,包括其中的鍵值和子鍵,然后如果 ValueType 不是 none 的話它將創建一個新的鍵和鍵值。
deletevalue
當指定了此標記時,如果該鍵值已存在,安裝程序會首先嘗試刪除該鍵值。然后如果 ValueType 不是 none ,並且該鍵不存在時它將創建該鍵和新的鍵值。
dontcreatekey
當指定了此標記時,如果該鍵不存在於用戶的系統中安裝程序將不會試圖創建該鍵或任何鍵值。如果改建不存在將不顯示錯誤消息。
典型地該標記同 uninsdeletekey 標記結合使用,以便在安裝時沒有創建該鍵時確保在卸載期間刪除該鍵。
noerror
如果安裝程序在創建鍵或鍵值時無論什么原因失敗不顯示錯誤消息。
preservestringtype
該標記只用於 ValueType 參數為 string 或 expandsz 時。當指定了此標記並且該鍵值不存在或者已存在的鍵值不是字符串類型 (REG_SZ 或 REG_EXPAND_SZ) 時,該項將由 ValueType 指定的類型創建,如果該鍵值存在並且是一個字符串類型,該項將由與預先存在的鍵值相同的鍵值類型替代。
uninsclearvalue
當程序被卸載時,將設置該鍵值的數據為空的字符串 (類型 REG_SZ). 該標記不能同 uninsdeletekey 標記一起使用。
uninsdeletekey
當程序被卸載時,刪除整個鍵,包括其下全部的鍵值和子鍵。對於由 Windows 自身使用的鍵來說使用該標記明顯不是一個好的主意,你應當將該標記應用到你自己的應用程序鍵中。
uninsdeletekeyifempty
當程序被卸載時,如果該鍵下沒有其它鍵值和子鍵則將其刪除。該標記可以結合 uninsdeletevalue 標記一起使用。
uninsdeletevalue
當程序卸載時刪除該鍵值,該標記可以結合 uninsdeletekeyifempty 標記一起使用。
注意:對於 Inno Setup 1.1 之前的版本,你可以與 none 數據類型一起使用該標記則將會成為 “delete key if empty” (如為空則刪除該鍵)功能的標記。這個技巧現在已經不在被支持,你必須使用 uninsdeletekeyifempty 標記來實現該功能。
示例:
Flags: uninsdeletevalue
公共參數
[Run] & [UninstallRun] 段
[Run] 段是可選的,指定任意數量的程序在成功安裝程序以后及顯示結束對話框之前被執行。同樣 [UninstallRun] 段也是可選的,指定任意數量的程序在“卸載程序”的第一步時被執行。除非下面有其它說明,兩個段共有相同的語法。
每個程序按照你的腳本編排的順序被執行,當出路 [Run]/[UninstallRun] 的項時,安裝程序將會等到當前的程序終止之后才處理下一個,當然除非使用了 nowait 標記。
這是一個 [Run] 段的示例。
[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
下面列出了支持的參數:
Filename (必需的)
說明:
要被執行的程序,或要被打開的文件/文件夾。如果 Filename 不是一個 .exe 或 .com 文件,你必須在該項中使用 shellexec 標記。該參數可以包含常量。
示例:
Filename: "{app}\INIT.EXE"
Parameters
說明:
程序可選的命令行參數,該參數可以包含常量。
示例:
Parameters: "/x"
WorkingDir
說明:
程序起始位置的目錄。如果沒有指定該參數或該參數是空的,將不會改變任何特殊的目錄。該參數可以包含常量。
示例:
WorkingDir: "{app}"
RunOnceId
說明:
只在 [UninstallRun] 段里面有效。如果相同的應用程序被安裝超過了一次,“run”項將會重復出現在卸載記錄文件里面。通過將一個字符串賦值給 RunOnceId, 你可以確保一個獨特的 [UninstallRun] 項在卸載期間只被執行一次。例如,如果在卸載記錄中的“run”中有兩個或者更多的帶有 RunOnceId 參數並被設置為“DelService”的項,則只有最后一個帶有一個 RunOnceId 參數並被設置為“DelService”的項會被執行。其余的將被忽略。注意 RunOnceId 參數是大小寫敏感的。
示例:
RunOnceId: "DelService"
Flags
說明:
“標記”,這個參數是一個附加的選項集合,可以多個選項共同使用,使用空格分開多個選項。下面列出了被支持的選項:
nowait
如果指定了該標記,將不會等待該項處理被結束運行之前就進行到下一個 [Run] 項,或者結束安裝程序。不能結合 waituntilidle
標記一起使用。
shellexec
如果 Filename 不是一個可以直接執行的文件(一個 .exe 或 .com 文件)則該標記是必需的。當設置了該標記時,Filename 可以是一個文件夾或者任何已注冊的文件類型 ―― 包括 .hlp, .doc 等等。文件將會被用戶系統中的與該文件類型相關聯的應用程序打開,就像用戶在資源管理器中用鼠標雙擊該文件一樣。
當在 Filename 中使用一個文件夾名稱時,建議在后面加上一個反斜杠字符(例如“{group}\”),以確保可能有相同名稱的程序不會被執行。同樣要注意文件夾只能在 Windows 95/NT 4+ 上被打開,因為從那時起使用了一個新的資源管理器的外殼。
使用 shellexec 標記有一個缺點,那就是無法等待該過程結束,因此,它始終就像被指定了 nowait 標記一樣操作。
skipifdoesntexist
如果指定了該標記,如果 Filename 不存在安裝程序將不會顯示錯誤消息。它只適用於 [Run] 段,因為卸載程序從來不顯示錯誤消息在 [UninstallRun] 項執行失敗時。
runmaximized
如果指定了該標記,將會在一個最大化的窗口啟動程序或文檔。
runminimized
如果指定了該標記,將會在一個最小化的窗口啟動程序或文檔。
waituntilidle
如果指定了該標記,它將暫停直到該過程正在等待用戶的輸入並且沒有未決的輸入時,取而代之的是等待該過程的結束。(該標記調用 WaitForInputIdle Win32 函數.) 不能結核 nowait 一起使用。
示例:
Flags: nowait
公共參數
[UninstallDelete] 段
該段是可選的。該段是用來定義一些附加的除了那些被安裝的應用程序之外的要被卸載程序刪除的文件或目錄。使用該段來刪除由你的應用程序創建的 .INI 文件是一個常用的辦法。卸載程序在卸載過程的最后一步處理這些項。
這是一個 [UninstallDelete] 段的示例:
[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"
下面列出了支持的參數:
Type (必需的)
說明:
指出要被卸載程序刪除的是什么。必須是下列之一:
files
Name 參數指定的是一個具體的文件的名稱,或者是一個帶有通配符的文件名。
filesandordirs
功能上類似於 files ,但是它還可以匹配目錄名稱,並且任何名稱匹配的目錄包括其中所有的文件和子目錄都會被刪除。
dirifempty
當使用它時,Name 參數必須是一個目錄的名稱,但是它不能包括通配符。只有在不包含任何文件和子目錄的情況下該目錄才能被刪除。
示例:
Type: files
Name (必需的)
說明:
要被刪除的文件或目錄的名稱。
注意:不要試圖通過在這里使用通配符去刪除 {app} 目錄下的全部文件,我強烈建議你不要這樣做的原因由兩個,首先,用戶通常不會意識到可能還有他們放進應用程序目錄中的數據文件將要被刪除而不會得到警告(例如他們可能卸載應用程序只是為了要將它轉移到一個不同的驅動器)。最好是將其保留一直到最后用戶想要刪除時用手工的方法刪除;還有,如果由於用戶的失誤碰巧將程序安裝到了一個錯誤的目錄當中(例如 C:\WINDOWS)而這時去卸載它勢必結果會損失慘重。再次聲明,千萬不要這么做!
示例:
Name: "{win}\MYPROG.INI"
公共參數
編譯器相關
[Setup]: Bits
有效值: 32
說明:
1.3 版本以后已廢棄。 1.3 以前的版本的 Inno Setup 有一個 16 位的版本,編譯器將檢查 Bits 關鍵字以判斷是否使用了正確的編譯器來編譯腳本。以后 Inno Setup 的更新的版本只有 32 位的版本可用,你將不再需要設置該關鍵字。無論什么時候如果 Bits 被設置為“16”,編譯器都將會失敗並提示一個錯誤消息。
[Setup]: UseSetupLdr
有效值: yes 或 no
默認值: yes
說明:
告訴安裝程序編譯器要創建的安裝程序的類型,如果是 yes, 將把所有的安裝程序數據編譯成一個單獨的 SETUP.EXE (如果你願意也可以重新命名為任何名稱)。如果是 no, 將把安裝程序數據編譯成至少三個文件:SETUP.EXE, SETUP.0 和 SETUP.1. 你想使用 no 的僅有的理由大概是為了調試的目的。
注意:不要在一個使用了多磁盤生成(DiskSpanning=yes)的安裝程序中使用 UseSetupLdr=no,當 UseSetupLdr 是 yes 時,安裝程序被復制到用戶的臨時 (TEMP) 目錄並在那里運行,這不會發生在 UseSetupLdr 是 no 的情況下,如果 Windows 試圖去在磁盤上尋找 setup.exe 文件卻不能找到,因為在驅動器中的是一個不同的磁盤,所以會產生錯誤的結果。
[Setup]: BackColor, BackColor2
有效值: 一個值形如 $bbggrr, 這里的 rr, gg 和 bb 指定了兩位的亮度值(以十六進制表示)分別為紅色,綠色和藍色。或者也可以是下列預定義的顏色名稱之一:clBlack(黑色),clMaroon(暗紅),clGreen(綠色),clOlive(橄欖綠),clNavy(深藍),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(淺灰),clRed(紅色),clLime(淺綠),clYellow(黃色),clBlue(藍色),clFuchsia(紫紅),clAqua(青綠),clWhite(白色)。
默認值: BackColor 為 clBlue,
BackColor2 為 clBlack
說明:
BackColor 關鍵字自定的顏色被用在安裝程序窗口背景漸變色的上面(或左面,如果 BackColorDirection=lefttoright),BackColor2 指定的顏色被用在下面(或右面)。
如果 BackSolid=yes 則 BackColor2 的設置被忽略。
示例:
BackColor=clBlue
BackColor2=clBlack
BackColor=$FF0000
BackColor2=$000000
[Setup]: BackColorDirection
有效值: toptobottom 或 lefttoright
默認值: toptobottom
說明:
決定了安裝程序窗口的背景漸變色的漸變方向,如果 BackColorDirection 是 toptobottom, 將自上而下繪出,如果是 lefttoright,將從左到右繪出。
[Setup]: BackSolid
有效值: yes 或 no
默認值: no
說明:
它決定了安裝程序窗口的背景色是使用單一顏色還是漸變色,如果是 yes, 背景色會是一單一顏色(顏色由 BackColor 指定,忽略 BackColor2)。
[Setup]: AppName
說明:
這個必需的關鍵字指定了你正在安裝的應用程序的標題。不要包含版本號,那樣應該使用 AppVerName 關鍵字。AppName 在安裝程序的全部過程始終被顯示,位於安裝程序屏幕的左上角和向導中。
示例: AppName=My Program
[Setup]: AppVerName
說明:
這個必需的關鍵字的值應該和 AppName 的值相同(或相似),但是它還應當包含程序的版本號。
示例: AppVerName=My Program version 3.0
[Setup]: AppId
默認值: 如果沒有指定 AppId 或者它是空值,編譯器將會把 AppName 的值作為 AppId 來使用。
說明:
AppId 的值是被存儲在卸載記錄文件 (unins???.dat) 里面的,以便隨后的安裝程序檢查后決定是否可以被添加到一個特定的已存在的卸載記錄,安裝程序只有在已存在的卸載記錄中的 AppId 和當前的安裝程序的 AppId 相同是才能添加到卸載記錄。舉一個實際的例子,比方說你右兩個安裝程序,一個叫做《我的程序》而另外一個叫做《我的程序 1.1 升級版》,要想把《我的程序 1.1 升級版》添加到《我的程序》的卸載記錄中,你應該設置兩個安裝程序的 AppId 為相同的值。
AppId 還決定了卸載注冊表鍵的實際名稱,被 Inno Setup 在其末尾附加上“_is1”(因此,如果 AppId 是 “MyProgram”,那么這個鍵將會被命名為“MyProgram_is1”)。Inno Setup 的早於 1.3 的版本的鍵的名稱是基於 AppVerName 的值的。
無論什么時候 AppId 都不會被顯示出來,因此你要求非常隱諱的感覺很輕松。
示例: AppId=MyProgram
[Setup]: AppMutex
說明:
如果用戶要為當前的應用程序升級為新的版本,然而當前的應用程序正在運行,該關鍵字就是用來防止這類事情的發生的,而且它也可以防止用戶卸載正在運行的應用程序。它指定了一個或多個同名互斥體的名稱(多個互斥體用逗號隔開),安裝程序和卸載程序將會在啟動時檢查,如果存在,安裝程序/卸載程序將顯示如下的信息:“[安裝程序或卸載程序] 檢測到 [應用程序] 現在正在運行。請立即關閉它的全部實例,然后單機'確定’繼續,或者'取消’退出。”
如果你要使用這個關鍵字就必須在你的應用程序中以該關鍵字指定的名稱添加一個同名的互斥體。例如在 Delphi 和 C 中創建如下顯示的同名互斥體,該代碼應該在應用程序啟動是被執行。
Delphi:
CreateMutex(nil, False, ’MyProgramsMutexName’);
C:
CreateMutex(NULL, FALSE, "MyProgramsMutexName");
並不是必需在應用程序被結束之前顯示的銷毀同名互斥體對象,系統會自動完成此功能,也不推薦你這樣做,因為理想狀態下同名互斥體對象必須存在直到進程被完全終止。
注意在 Windows 下同名互斥體是大小寫敏感的。
要想獲得有關同名互斥體的更多信息請參閱 MS SDK 幫助的 CreateMutex 主題。
示例: AppMutex=MyProgramsMutexName
[Setup]: AppCopyright
說明:
可選的,它只是用來在安裝程序屏幕的右下角顯示一個版權消息。
示例: AppCopyright=Copyright ? 1997 My Company, Inc.
[Setup]: AppPublisher, AppPublisherURL, AppSupportURL, AppUpdatesURL, AppVersion
說明:
所有這些關鍵字都是用來在 Windows 2000 的控制面板“添加/刪除程序”的“支持”對話框中顯示一些信息。這些設置是可選的,並且在早期的 Windows 版本中是沒有作用的。
示例:
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.mycompany.com/
AppVersion=1.5
[Setup]: DefaultDirName
說明:
這是個必需的關鍵字,該值是默認的目錄名稱,用於“選擇目錄頁”向導。通常它有一個目錄常量前綴。
如果 UsePreviousAppDir 是 yes (默認值)並且安裝程序發現已經安裝了一個相同應用程序的早期版本,它將用先前選擇的目錄代替默認的目錄名稱。
示例:
如果你使用:
DefaultDirName={sd}\MYPROG
在 Setup 中,典型地應有如下顯示:
C:\MYPROG
如果你使用:
DefaultDirName={pf}\My Program
在 Setup 中,典型地應有如下顯示:
C:\Program Files\My Program
[Setup]: Uninstallable
有效值: yes 或 no
默認值: yes
說明:
它決定了 Inno Setup 的自動卸載程序是否被包含在安裝程序中。如果是 yes 將包含卸載程序,如果是 no 將不會包括可卸載支持,最終用戶只能用手工的方法刪除屬於你的應用程序的文件。
[Setup]: MinVersion
格式: a.bb,c.dd, 這里的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默認值: 4,4
說明:
該關鍵字讓你指定運行你的軟件所需要的最低的 Windows 或 Windows NT 的版本,默認值是“4,4”,實際上它也可以被設置為“4,3.51”來支持 NT 3.51 . 要防止你的程序被運行在 Windows 或 Windows NT 上,指定“0”為其中之一的最低版本。版本創建編號(Build numbers)和(或)服務包級別(Service pack levels)可以被包括在版本號中。
如果用戶的系統不適合所要求的最低版本,安裝程序將給出一個錯誤消息然后退出。
[Setup]: OnlyBelowVersion
格式: a.bb,c.dd, 這里的 a.bb 是表示 Windows 的版本,c.dd 是表示 Windows NT 的版本。
默認: 0,0
說明:
該關鍵字讓你指定不能運行你的軟件的最低的 Windows 或 Windows NT 的版本(亦即高於此版本則無法運行)。指定 0 為其中之一的版本的意思是沒有版本上限。版本創建編號(Build numbers)和(或)服務包級別(service pack levels)可以被包括在版本號中。
該關鍵字實際上是和 MinVersion 恰好相反。
[Setup]: AdminPrivilegesRequired
有效值: yes 或 no
默認值: no
說明:
如果設置為 yes, 而且用戶沒有管理員的權限,那么安裝程序在啟動的時候將給出一個錯誤消息(“安裝這個程序時你必須以管理員的身份登錄。”)。它只適用於 Windows NT/2000.
[Setup]: DisableAppendDir
有效值: yes 或 no
默認值: no
說明:
當設置為 yes 時,安裝程序不會自動的添加上次組件的路徑從 DefaultDirName 到用戶在“選擇目錄”向導頁上雙擊鼠標選擇的目錄。此外,它設置目錄列表框的初始目錄為 DefaultDirName (如果該目錄存在)而不是上一級。
[Setup]: EnableDirDoesntExistWarning
有效值: yes 或 no
默認值: no
說明:
當設置為 yes 時,如果用戶選擇的文件夾不存在安裝程序將顯示一個消息框。當這項為 yes 時通常你還應該設置 DirExistsWarning=no。
[Setup]: AlwaysCreateUninstallIcon
有效值: yes 或 no
默認值: no
說明:
如果該項為 yes, 除了在控制面板的添加/刪除程序中添加一項之外安裝程序還將創建一個 “卸載 ...” 應用程序圖標。
在 NT 3.51 上安裝程序將會始終創建這個應用程序圖標不管該項的設置,因為它沒有包含“添加/刪除程序”的部件。
[Setup]: ExtraDiskSpaceRequired
默認值: 0
說明:
正常情況下,磁盤空間的需求是依照 [Files] 段中的所有文件的合計值計算出來並在向導中被顯示的。如果不管什么原因你想要增加顯示的磁盤空間,以字節為單位設置 ExtraDiskSpaceRequired 的數值你想要合計該數字。 (1048576 字節 = 1 兆字節)
[Setup]: CompressLevel
有效值: 0 到 9
默認值: 7
說明:
這是一個從 1 到 9 的數字,它指定了要給文件使用多大的壓縮率,0 表示不壓縮,9 表示最大限度的壓縮。數字越大處理的就越慢,使用高於默認值 7 的數字來壓縮並沒有多大的改善。
[Setup]: CreateAppDir
有效值: yes 或 no
默認值: yes
說明:
如果該值設置位 no, 將不會創建應用程序的目錄,也不會顯示“選擇目的文件夾”向導頁,並且 {app} 目錄常量會等效為 {win} 目錄常量。當 CreateAppDir 是 no 時如果卸載功能是允許的,卸載數據文件將會被創建於系統的 Windows 目錄。
[Setup]: CreateUninstallRegKey
有效值: yes 或 no
默認值: yes
說明:
如果該值設置為 no, 安裝程序將不會在控制面板的“添加/刪除程序”中創建一項。這個可以用於你的應用程序只是更新一個已經存在的應用程序而不想創建其它的項,但是請不要完全的禁止卸載功能(通過 Uninstallable=no)。
當這個關鍵字設置為 no 時,UpdateUninstallAppName 通常也設置為 no .
[Setup]: OverwriteUninstRegEntries
說明:
1.3 版本以后已廢棄。該關鍵字已經不再被支持並且被忽略。在 Inno Setup 1.3.6 及以后的版本中,它的功能作為如果設置為 1 優先版本的 OverwriteUninstRegEntries 關鍵字(這是默認的設置)。
[Setup]: DirExistsWarning
有效值: auto, yes 或 no
默認值: auto
說明:
當設置為 auto 時,即默認的設置,如果用戶在選擇目標文件夾向導頁中選擇了一個已經存在的文件夾,安裝程序將顯示“文件夾: … 已經存在,以願意將程序安裝到這個文件夾下面嗎?”的消息,除非有相同的應用程序的其它版本已經安裝並且也選擇了和上次安裝時相同的目錄(僅如果 UsePreviousAppDir 是 yes ,即默認設置)。
當設置為 yes 時,如果用戶選擇了已存在的目錄安裝程序將始終顯示“目錄已存在的消息”。
當設置為 no 時,安裝程序決不會顯示“目錄已存在的消息”。
[Setup]: DisableDirExistsWarning
有效值: yes 或 no
默認值: no
說明:
到版本 1.3.6 時已經廢棄。使用 DirExistsWarning 代替。
編譯器仍然承認 DisableDirExistsWarning,但是如果 DisableDirExistsWarning=no 它將被轉換成 DirExistsWarning=auto, 而且 DisableDirExistsWarning=yes 被轉換成 DirExistsWarning=no. 如果同時指定了 DisableDirExistsWarning 和 DirExistsWarning 關鍵字,則優先處理 DirExistsWarning.
[Setup]: DisableDirPage
有效值: yes 或 no
默認值: no
說明:
如果該項設置為 yes, 安裝程序將不會顯示“選擇目標文件夾”向導頁。在這種情況下,它將始終使用默認的目錄名。
[Setup]: DisableFinishedPage
有效值: yes 或 no
默認值: no
說明:
如果該項設置為 yes, 安裝程序將不會顯示“安裝完成”向導頁,並且在一次安裝過程結束后會立即關閉安裝程序。如果在 [Run] 段里面有一個要被執行的程序使用了 nowait 標記,並且你不希望在該程序被啟動之候安裝完成窗口還逗留在后台,此時該項是有用的。
注意安裝程序認為要重新啟動計算機,或如果指派了一個文件給 [Setup] 段的 InfoAfterFile 關鍵字,都將忽略 DisableFinishedPage 關鍵字。象這些情況,仍然會顯示“安裝完成”向導頁。
[Setup]: DisableProgramGroupPage
有效值: yes 或 no
默認值: no
說明:
如果該項設置為 yes, 安裝程序將不會顯示“選擇程序組”向導頁。在這種情況下,它將使用由 [Setup] 段的 DefaultGroupName 關鍵字指定的組名,或者“(Default)”如果沒有指定組名的話。
[Setup]: AlwaysUsePersonalGroup
有效值: yes 或 no
默認值: no
說明:
通常對於 Windows NT/2000, 如果用戶具有管理員權限,Inno Setup 的 {group} 常量被指向全部用戶(All Users)的開始菜單。如果該項被設置為 yes, 它將始終使用當前用戶的私人文檔(Profile)。
[Setup]: OutputBaseFilename
默認值: setup
說明:
這個關鍵字允許你為輸出的安裝程序文件指定一個不同的名字,這樣一來你就不用在運行完安裝編譯器以后手工為它們改名。
注意:如果 UseSetupLdr 被設置為 no, 輸出文件 SETUP.0 和 SETUP.MSG 的名字是不會被改變的,因為它們是強制編碼(hard-coded)的名字。
示例: OutputBaseFilename=MyProg100
[Setup]: UninstallFilesDir
默認值: {app}
說明:
指定存放卸載程序文件“unins*.*”的目錄。
注意:對於同一個應用程序的更新版本不應該將它賦一個不同的值,這樣一來安裝程序就不能在以前的版本中找到卸載記錄,因此就不能添加到該應用程序。
示例: UninstallFilesDir={app}\uninst
[Setup]: UninstallDisplayIcon
說明:
讓你指定一個確定的圖標文件(可以是一個可執行文件或者一個 .ico 文件)來顯示在 Windows 2000 控制面板的“添加刪除程序”的卸載項當中,文件名通常以一個目錄常量開始。
如果指定的文件包含多個圖標,你可以加上“,n”后綴以指定一個圖標索引,這里的 n 是以零為基數的索引數值。
如果沒有指定該關鍵字或者該關鍵字為空,Windows 將自己選擇一個圖標,當然這個可能是你不太喜歡的圖標。
示例:
UninstallDisplayIcon={app}\MyProg.exe
UninstallDisplayIcon={app}\MyProg.exe,1
[Setup]: UninstallDisplayName
說明:
讓你為控制面板的“添加/刪除程序”中的程序項指定一個制定的名字。如果未指定該關鍵字或該關鍵字為空,安裝程序將使用 [Setup] 段中的 AppVerName 關鍵字的名字(就像老版本的 Inno Setup 一樣)。
由於 Windows 9x 的控制面板的“添加/刪除程序”項的限制,UninstallDisplayName 不能超過 63 個字符。
示例:
UninstallDisplayName=My Program
[Setup]: UninstallIconName
說明:
你能夠使用該關鍵字給安裝程序創建的卸載圖標指定一個制定的名字(參見AlwaysCreateUninstallIcon)。如果該關鍵字為空或沒有指定,安裝程序將其命名為“卸載 App-Name”,這里的“App-Name”是由 [Setup] 段的關鍵字 AppName 指定的。
注意: 記住 Windows 95/NT 4+ 的應用程序圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程序圖標的名稱。
示例: UninstallIconName=Uninstall My Program
[Setup]: UninstallLogMode
有效值: append, new 或 overwrite
默認值: append
說明:
append, 默認設置,如果可能,通知安裝程序添加到一個已存在的卸載記錄。
new, 同 Inno Setup 1.3 版本以前的版本的行為是一致的,通知安裝程序始終創建一個新的卸載記錄。
overwrite 通知安裝程序要覆蓋相同的應用程序的任何已存在的卸載記錄而不是添加(這是不被推薦的)。相同的規則添加到已存在的記錄應用於覆蓋已存在的記錄。
示例: UninstallLogMode=append
[Setup]: UpdateUninstallAppName
有效值: yes 或 no
默認值: yes
說明:
如果為 yes, 當添加到一個已存在的卸載記錄時,安裝程序將以當前的安裝程序的 AppName 替換在卸載記錄中的 AppName. 卸載記錄中的 AppName 決定了卸載程序顯示的標題。如果你的安裝程序只是一個升級或附加到一個已存在的程序,並且你不想改變卸載程序的標題,那么你可以設置該值為 no.
[Setup]: DefaultGroupName
說明:
該關鍵字的值是默認的“程序管理器/開始菜單”程序組的名稱,它被“選擇程序組”向導頁使用。如果該關鍵字為空或沒有指定的話,它將會使用“(默認)”作為其名稱。
注意: 記住 Windows 95/NT 4+ 的應用程序圖標是作為文件直接存儲的,這樣一來普通文件所不允許使用的字符都不能用來作為應用程序圖標的名稱。
示例: DefaultGroupName=My Program
[Setup]: DisableStartupPrompt
有效值: yes 或 no
默認值: no
說明:
如果該值被設為 yes, 安裝程序將不會顯示“准備安裝…,你希望繼續嗎?”的提示。
如果 UseSetupLdr 被設置為 no 該值將不會產生作用。
[Setup]: DiskSpanning
有效值: yes 或 no
默認值: no
說明:
決定編譯器是創建一個單獨的 SETUP.EXE, 還是把它分割成為幾個文件以適合於放到分開的軟磁盤上。當這個關鍵字被設置為 yes, 磁盤生成是允許的,將輸出文件 SETUP.EXE 和 SETUP.1 復制到第一個磁盤上,SETUP.2 復制到第二個磁盤上,等等。
[Setup]: DiskSize
默認值: 1457664 (一個 1.44MB 軟磁盤的大小)
說明:
指定了一個磁盤的可用空間統計數值的字節值。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁盤輸出則這個關鍵字就會被忽略。
[Setup]: DiskClusterSize
默認值: 512 (軟磁盤的標准的簇的大小)
說明:
它指定了磁盤介質的簇的大小。安裝編譯器需要知道該值為了適當的填充每一個磁盤的容量。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁盤輸出則這個關鍵字就會被忽略。
[Setup]: ReserveBytes
默認值: 0
說明:
指定了應該在第一張磁盤上保留的最小空閑字節數,這樣可以用於將其它的不是安裝程序部分的文件復制到第一張磁盤上,比如說一個自述文檔。
安裝編譯器將把這個數值取整為最接近的簇。
如果 [Setup] 段的關鍵字 DiskSpanning 沒有允許磁盤輸出則這個關鍵字就會被忽略。
[Setup]: DontMergeDuplicateFiles
有效值: yes 或 no
默認值: no
說明:
通常兩個具有相同的源文件的項將只會被存儲和壓縮一次。如果你的安裝程序中有一組相同的文件,在腳本中使他們只想相同的源文件,這樣你的安裝程序的能夠明顯縮小。如果由於某些原因你希望禁止這個功能,設置該關鍵字為 yes .
[Setup]: AllowNoIcons
有效值: yes 或 no
默認值: no
說明:
這個用於決定安裝程序是否顯示一個“不創建任何圖標”的復選框,這樣使用戶能夠跳過創建程序圖標的過程。如果該項為 no 將不會顯示復選框,如果為 yes 則將被顯示。
如果安裝程序運行在 NT 3.51 上時選擇了“不創建任何圖標”的復選框,那么用戶能夠徹底卸載應用程序的辦法只有執行應用程序目錄下面的 unins???.exe 文件。因為這個原因,我們推薦你保留 AllowNoIcons 設置為 no.
[Setup]: AllowRootDirectory
有效值: yes 或 no
默認值: no
說明:
當設置為 no 時,即默認的,用戶將不能被允許在“選擇目錄頁”向導中輸入一個根目錄(就像“C:\”)。
[Setup]: AlwaysRestart
有效值: yes 或 no
默認值: no
說明:
當設置為 yes, 安裝程序始終會在一次成功的安裝過程結束后提示用戶重新啟動系統,而不管這是不是必須的(因為在 [Files] 段的一些項當中帶有 restartreplace 標記)。
[Setup]: MessagesFile
默認值: compiler:DEFAULT.ISL
說明:
指定要讀取的默認信息的文件的名稱。運行安裝編譯器時該文件必須位於你的安裝程序的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
當指定了多個文件時,它們時按照它們所排列的順序被讀取的,因而最后的消息文件中的消息就會覆蓋其先前的消息文件。
請參見 [Messages] 段幫助主題關於 .isl 文件格式的詳細資料。
示例: MessagesFile=compiler:czech.isl
MessagesFile=compiler:default.isl,compiler:mymessages.isl
[Setup]: LicenseFile
說明:
指定一個可選的許可協議文件的名稱,為 .txt 或 .rtf (豐富文本)格式,它在用戶選擇程序的目標文件夾之前被顯示。運行安裝編譯器時該文件必須位於你的安裝程序的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
示例: LicenseFile=license.txt
[Setup]: InfoBeforeFile
說明:
指定一個可選的自述文檔(Readme)的名稱,為 .txt 或 .rtf (豐富文本)格式,它在用戶選擇程序的目標文件夾之前被顯示。運行安裝編譯器時該文件必須位於你的安裝程序的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
示例: InfoBeforeFile=infobefore.txt
[Setup]: InfoAfterFile
說明:
指定一個可選的自述文檔(Readme)的名稱,為 .txt 或 .rtf (豐富文本)格式,它會在安裝成功以后被顯示。運行安裝編譯器時該文件必須位於你的安裝程序的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
這個不同於代有 isreadme 標記的文件項,它的文本是作為向導的一頁被顯示的,而后者顯示於一個單獨的記事本窗口。
示例: InfoAfterFile=infoafter.txt
[Setup]: ChangesAssociations
有效值: yes 或 no
默認值: no
說明:
當設置為 yes 時,安裝程序會在其安裝過程結束時告訴資源管理器要刷新它的文件關聯信息,並且卸載程序在其卸載過程結束時也會去這樣作。如果安裝程序運行在 Windows NT 3.51 上時這個關鍵字時不起作用的。
如果你的安裝程序創建了一個文件關聯但是沒有將 ChangesAssociations 設置為 yes, 該文件類型的正確的圖標很可能不會被顯示知道用戶注銷或者重新啟動計算機。
[Setup]: UsePreviousAppDir
有效值: yes 或 no
默認值: yes
說明:
當該關鍵字被設置為 yes 時,即默認值,再安裝程序啟動時將會在注冊表中查找看是否有相同的應用程序已經被安裝,如果是這樣,它將使用先前的安裝程序的目錄作為默認的目錄提供給用戶的向導。
注意只有 Inno Setup 1.3.1 和其后續版本才會在注冊表中保存安裝的目錄,就是說安裝程序不會“看見”老版本的 Inno Setup 安裝的應用程序。
[Setup]: UsePreviousGroup
有效值: yes 或 no
默認值: yes
說明:
當該關鍵字被設置為 yes 時,即默認值,再安裝程序啟動時將會在注冊表中查找看是否有相同的應用程序已經被安裝,如果是這樣,它將使用先前的安裝程序的開始菜單組作為默認的開始菜單組提供給用戶的向導。
注意只有 Inno Setup 1.3.1 和其后續版本才會在注冊表中保存安裝的目錄,就是說安裝程序不會“看見”老版本的 Inno Setup 安裝的應用程序。
[Setup]: Password
說明:
指定一個口令,在安裝過程開始時提示用戶輸入。
如果使用了一個口令,重要的是要緊記並沒有加密技術被使用,並且 Inno Setup 的源代碼是完全開放的,對於一個個別的富有經驗的人來說從安裝程序中移去口令的保護不是十分困難的。使用口令僅僅起到一個阻止那些沒有得到授權的人使用你的安裝程序。
[Setup]: WizardImageFile
默認值: compiler:WIZIMAGE.BMP
說明:
指定要在安裝程序向導左側顯示的位圖文件的名稱。運行安裝編譯器時該文件必須位於你的安裝程序的源目錄中,除非指定了一個全程路徑名稱,或者路徑名是以“compiler:”作為其前綴,這樣它會在編譯器的目錄當中查找該文件。
當前還不支持 256 色位圖,因為尚未使用調色板句柄。位圖的最大尺寸是 117x231 象素。
示例: WizardImageFile=myimage.bmp
[Setup]: WindowShowCaption
有效值: yes 或 no
默認值: yes
說明:
如果設置為 no, 安裝程序將會是真正的“全屏幕” ―― 它沒有標題欄和邊框,並且會位於任務欄的前面。
[Setup]: WindowStartMaximized
有效值: yes 或 no
默認值: yes
說明:
如果設置為 no, 安裝程序啟動時不會初始為最大化,這樣會導致藏起任務欄。
[Setup]: WindowResizable
有效值: yes 或 no
默認值: yes
說明:
如果設置為 no, 在安裝程序背景窗口不是最大化狀態時用戶將不能調整其大小。
[Setup]: WindowVisible
有效值: yes 或 no
默認值: yes
說明:
如果設置為 no, 安裝程序背景窗口將是不可見的 ―― 只有向導和安裝過程窗口。
[Setup]: WizardImageBackColor
有效值: 一個值形如 $bbggrr, 這里的 rr, gg 和 bb 指定了兩位的亮度值(以十六進制表示)分別為紅色,綠色和藍色。或者也可以是下列預定義的顏色名稱之一:clBlack(黑色),clMaroon(暗紅),clGreen(綠色),clOlive(橄欖綠),clNavy(深藍),clPurple(紫色),clTeal(深青),clGray(灰色),clSilver(淺灰),clRed(紅色),clLime(淺綠),clYellow(黃色),clBlue(藍色),clFuchsia(紫紅),clAqua(青綠),clWhite(白色)。
默認值: clTeal
說明:
該關鍵字指定了用於填充向導位圖(由 WizardImageFile 指定)周圍的未使用區域的背景顏色。
[Setup]: SourceDir
說明:
給腳本指定一個新的源目錄sourcedirectorynotes。
示例: SourceDir=c:\files
[Setup]: OutputDir
說明:
給腳本指定一個新的輸出目錄,這是安裝編譯器放置輸出的 SETUP.* 文件的地方。默認情況下它在含有腳本文件的目錄下創建一個“OUTPUT”子目錄。
示例: OutputDir=c:\output
其它
關於 Program Files 目錄的說明
Program Files 目錄歷來就只被 Windows 95/NT 4+ 支持。在 NT 3.51 上一個“模擬的” Program Files 目錄被創建於系統驅動器目錄下硬代碼名稱“\Program Files”。
源目錄
默認情況下,如果沒有包含全程路徑名,安裝編譯器期望在與腳本文件相同的目錄中找到在腳本中 [Files] 段引用的 Source 參數的文件和 [Setup] 段引用的文件。要指定一個不同的源目錄,在腳本的 [Setup] 段中創建一個 SourceDir 關鍵字。
使用版本創建編號和(或)服務包級別
在 MinVersion 和 OnlyBelowVersion 中的版本號能夠包含版本創建編號(Build numbers)和(或)服務包級別(service pack levels) 例如:5.0.2195, 5.0sp1, 5.0.2195sp1。如果一個版本創建編號沒有被指定或者為零,安裝程序將不會檢查版本創建編號。如果一個服務包級別沒有被指定或者為零,安裝程序會將其解釋為“沒有服務包”。注意安裝程序只能在 NT 4.0 及其后續版本中檢查服務包級別,所以指定“3.51sp5”去檢查NT 3.51 SP5 將不會工作。
關於"yes" 和 "no" 的說明
為了保持和舊版本 Inno Setup 的兼容性,1 和 0 可以分別的代替 yes 和 no 使用。
另外,它也允許 true 和 false 代替 yes 和 no 使用。
相同的應用程序
“相同的應用程序” 涉及到兩個分開的安裝程序共享一個相同的 AppId 設置 (或者如果 AppId 沒有設置,那么有相同的 AppName 設置).
添加到已存在的卸載記錄
當一個新版本的應用程序被安裝並覆蓋一個已存在的版本時,並不創建一個新的卸載記錄文件(unins???.dat),安裝程序會在默認的情況下尋找並添加到一個已存在的屬於相同的應用程序並在相同的目錄中的卸載記錄文件中,這樣,當應用程序被卸載時,所有的不同的安裝程序所做的改變將會被撤銷(開始於最近的安裝程序)。
卸載程序將會使用最近的應用程序的安裝程序的消息(messages)。然而,有一個例外:如果一個安裝程序被一個舊版本的 Inno Setup 所創建,它包含一個比用戶系統中的已存在的版本還要舊的卸載程序,兩個卸載程序的消息都不會被替換,盡管在這種情況下卸載記錄仍然會被添加,因為它的文件格式是向后兼容的。
卸載程序顯示的應用程序的名稱將會與最近安裝程序中 [Setup] 段的關鍵字 AppName 的值相同,除非 UpdateUninstallAppName 被設置為 no.
卸載記錄添加功能是不熟悉的 Inno Setup 1.3。如果你希望禁止它,設置 [Setup] 段的關鍵字 UninstallLogMode.
注意:安裝程序只能添加到被 Inno Setup 1.3.1 (及其后續版本)的安裝程序創建的卸載記錄文件中。
其二:幫助漢譯
前言:
Inno Setup 是一個非常優秀的安裝制作器,它可以很輕易地制作出界面美觀,風格獨特的安裝程序。它所提供的向導更是讓你從繁瑣的腳本中解脫出來,就算你不懂腳本語言也能輕易地制作功能強大的安裝程序。
但如果想更好地使用該制作器或制作出功能更強大的安裝程序,了解其腳本格式及語法是必須的 ,它本身所附帶的幫助文件也基本上提供了全面的敘述和豐富的例子。
該制作器是基於腳本來做的,腳本大致上分成若干的段,各段掌管不同的功能。其詳細的功能見段內敘述。
[Setup]段 這段包含了安裝和卸載時用到的全局設置, 和你所創建的安裝程序的必備指令。下面是一個實例:
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program 以下指令可以放置在[Setup]段中: (粗體的指令是必須要有的) 編譯器相關指令: * Compression * DiskClusterSize * DiskSize * DiskSpanning * DontMergeDuplicateFiles * InternalCompressLevel * OutputBaseFilename * OutputDir * ReserveBytes * SourceDir * UseSetupLdr 安裝程序相關指令:(這些指令將影響設置程序的操作, 或保存起來在日后卸載時使用。) * AdminPrivilegesRequired * AllowNoIcons * AllowRootDirectory * AllowUNCPath * AlwaysCreateUninstallIcon * AlwaysRestart * AlwaysShowComponentsList * AlwaysShowDirOnReadyPage * AlwaysShowGroupOnReadyPage * AlwaysUsePersonalGroup * AppName * AppId * AppMutex * AppPublisher * AppPublisherURL * AppSupportURL * AppUpdatesURL * AppVersion * AppVerName * ChangesAssociations * CreateAppDir * CreateUninstallRegKey * DefaultDirName * DefaultGroupName * DirExistsWarning * DisableAppendDir * DisableDirPage * DisableFinishedPage * DisableProgramGroupPage * DisableReadyMemo * DisableReadyPage * DisableStartupPrompt * EnableDirDoesntExistWarning * ExtraDiskSpaceRequired * InfoAfterFile * InfoBeforeFile * LicenseFile * MessagesFile * MinVersion * OnlyBelowVersion * Password * Uninstallable * UninstallDisplayIcon * UninstallDisplayName * UninstallFilesDir * UninstallIconName * UninstallLogMode * UpdateUninstallLogAppName * UsePreviousAppDir * UsePreviousGroup * UsePreviousSetupType * UsePreviousTasks 潤飾: 使用這些指令僅是為了安裝程序的顯示效果。 * AppCopyright * BackColor * BackColor2 * BackColorDirection * BackSolid * FlatComponentsList * ShowComponentSizes * UninstallStyle * WindowShowCaption * WindowStartMaximized * WindowResizable * WindowVisible * WizardImageBackColor * WizardImageFile * WizardSmallImageFile * WizardStyle 不常使用的: * Bits * CompressLevel * DisableDirExistsWarning * OverwriteUninstRegEntries [Types]段 這段是可選段。它定義了安裝程序時選擇安裝部件頁向導中的所有安裝類型。如果你在[Components]段中定義了部件,但卻沒有定義[Type]類型,則在編譯期間會創建一系列默認的安裝類型。如果你使用默認語言(英文)的信息文件,則這些類型會與下面的例子相同。以下是[Types]段的一個實例: [Types] Name: "full"; Description: "Full installation" Name: "compact"; Description: "Compact installation" Name: "custom"; Description: "Custom installation"; Flags: iscustom 下面是所支持的參數列表: Name (必須) : 這種類型的內部名稱,在[Components]段中當作參數用以告訴安裝程序該部件屬於那一種類型。 例:Name: "full" Description (必須) :類型的描述,可以包含常量。該描述內容是在安裝是顯示用的。 例:Description: "Full installation" Flags :該參數是一個附加的可選項。多個選項可以用空格來隔開。下面是該參數所支持的選項: iscustom :告訴安裝程序該類型是一個自定義類型,用戶可以在安裝時隨時地手動更改部件集合,安裝程序會將安裝類型轉成自定義類型。注意:如果你定義了一個自定義類型,則安裝程序就只允許用戶選擇一個安裝類型進行安裝,這樣用戶就再也無法隨意地選擇要安裝的部件。 例:Flags: iscustom [Components]段 這段是可選段,它定義了某一安裝類型下,安裝程序顯示在選擇部件頁中的所有部件。下面是 [Components]段的一個實例: [Components] Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed Name: "help"; Description: "Help Files"; Types: full 上面的實例生成兩個部件:"main"部件在用戶選擇"full"或"compact" 或 "custom"安裝類型時都會被安裝,而"help"部件則在用戶選擇"full"安裝類型時才被安裝,一但當用戶自定義安裝並選擇了安裝該部件時,即使該部件沒有指定"custom"類型,它也同樣會被安裝。 下面是該段所支持的參數列表: Name (必須) :該部件的內部名稱。例:Name: "help" Description (必須):部件的說明,可以包含常量。該說明是在安裝時顯示給用戶看的。 例: Name: "Help Files" Types :由空格分隔的該部件所屬類型列表。如果用戶選擇的安裝類型包含在此列表中,則該部件將被安裝。如果沒有使用fixed 標志,則任何自定義的安裝類型在該列表中將被安裝程序忽略。 例:Types: full compact ExtraDiskSpaceRequired :該部件所需的磁盤空間,類似於[Setup]段的ExtraDiskSpaceRequired 指令。 例:ExtraDiskSpaceRequired: 0 Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: fixed :告訴安裝程序,用戶不能在安裝過程中手動地選擇或取消選擇該部件。 restart :告訴安裝程序,在安裝該部件后詢問用戶是否重新啟動計算機。不管怎樣,如果[Files]段的某項帶有restartreplace 標記就必須加上此參數。類似於AlwaysRestart ,但就是每個部件都要加上。 disablenouninstallwarning :告訴安裝程序,如果用戶安裝了該部件又在卸載時沒有選擇卸載該部件時是否警告用戶,該部件沒有卸載。 考慮到你的部件的復雜性,你可以嘗試使用[InstallDelete]段。這樣該標記就可以自動地卸載沒有選擇卸載的部件。 例:Flags: fixed [Tasks]段 這段是可選段,它定義了安裝過程中,用戶所自定義所有需要安裝程序執行的任務。這些任務將以復選框或選擇按鈕的形式出現在選擇另外的任務頁中。下面是[Tasks]段的一個實例: [Tasks] Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Components: main Name: quicklaunchicon; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Components: main; Flags: unchecked Name: associate; Description: "&Associate files"; GroupDescription: "Other tasks:"; Flags: unchecked 下面是該段的參數列表: Name (必須) :任務的內部名稱。 例: Name: "desktopicon" Description (必須) :任務的說明文字,可以包含常量。該說明是在安裝過程中給用戶看的。 例: Description: "Create a &desktop icon" GroupDescription :一組任務的組說明,也可以包含常量。同一組內連續的任務說明要以一個文本標簽來分組。該文本標簽顯示了組的說明。 例: GroupDescription: "Additional icons" Components :一個以空格分隔的該任務所屬組件列表。如果用戶選擇的組件包含在此列表中,則該任務會被顯示出來。而一個沒有Components 參數的任務總是會顯示出來的。 例: Components: main Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: checkedonce : 告訴安裝程序,當安裝程序發現該軟件前一個版本已經安裝了的時候,該任務就不能再勾選。該標記不能與unchecked 標記一齊使用。 如果[Setup]段中沒有UsePreviousTasks 指令, 該標記將不會生效。 exclusive :告訴安裝程序,該任務與其他擁有相同組說明或使用exclusive標記的任務是相互排斥的。這意味着安裝程序將會顯示選擇按鈕而不是復選框。在一個組中不能只有一個exclusive 標記的任務,否則安裝程序將自動地將它變成非exclusive 標記的任務(用復選框代替選擇按鈕)。 restart :告訴安裝程序,如果該任務被選擇,則在安裝結束后詢問用戶是否重新啟動計算機。不管怎樣,如果[Files]段的某項帶有restartreplace 標記就必須加上此參數。類似於AlwaysRestart ,但就是每個任務都要加上。 unchecked :告訴安裝程序,該任務在開始時不該被勾選。該標記不能與checkedonce 一齊使用。 [Dirs]段 這段是可選段,而且是大多數簡單安裝程序中不常使用的。這段用於自動創建用戶選擇的軟件安裝目錄之外的目錄。創建應用軟件目錄下的子目錄是該段最普通的用法。你無需在將[Files]段中的文件復制到這些子目錄內前就創建他們,因此該段的主要用途是用於創建空的子目錄。下面是[Dirs]段的一個實例: [Dirs] Name: "{app}\data" Name: "{app}\bin" 上面的實例將會在安裝程序創建軟件目錄后創建兩個軟件目錄下的子目錄。下面是該段支持的參數列表: Name (必須):要創建的目錄名,通常會以一個目錄常量開頭。 例:Name: "{app}\MyDir" Attribs :為該目錄指定屬性。屬性包括: readonly, hidden, system。若不指定該參數,安裝程序不會為目錄指定任何屬性。如果目錄已經存在,則指定的屬性會該目錄原有的屬性組合后作為新的屬性使用。 例: Attribs: hidden system Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: deleteafterinstall :告訴安裝程序以普通的形式創建該目錄,但安裝結束(或非正常終止)后,如果目錄為空就將其刪除。這在腳本的[Run]段中需要執行一個程序來解開臨時數據時是非常有用的。該標記不會刪除安裝前就存在的目錄。 uninsalwaysuninstall :告訴卸載程序總是嘗試當目錄為空時將其刪除。正常情況下,卸載程序只會嘗試刪除軟件安裝前不存在的目錄,即安裝時所創建的目錄。 uninsneveruninstall :告訴卸載程序不要嘗試刪除該目錄。默認情況下,卸載程序會刪除[Dirs]段中的空目錄。例:Flags: uninsneveruninstall [Files]段 雖然這段是可選段,但很多的安裝都需要到。它定義了安裝程序要復制到用戶系統中的所有文件。安裝期間,卸載程序和卸載數據會被自動地復制到所裝軟件的目錄中,所以你無需干預這兩個文件。下面是[Files]段的一個實例: [Files] Source: "CTL3DV2.DLL"; DestDir: "{sys}"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall Source: "MYPROG.EXE"; DestDir: "{app}" Source: "MYPROG.HLP"; DestDir: "{app}" Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme 下面是該段所支持的參數列表: Source (必須) :源文件名。如果你不給出一個完整的路徑,編譯器將自動補上安裝的源目錄路徑在此文件名前。可以通過使用通配符來達到在一行中指定一組的文件。當使用通配符時,所有匹配的文件將會應用相同的選項。當指定了external 標記時,源文件名必須是一個帶有完整路徑的文件(或通配文件)並存在於發行介質或用戶的系統上。常量只能夠在指定了external標記時使用,因為編譯本身不作常量的翻譯。 例:Source: "MYPROG.EXE" 或 Source: "Files\*" DestDir (必須) :指定文件安裝到用戶系統中的目錄。它幾乎總是以目錄常量開頭的。如果指定的目錄在用戶系統中不存在,它將自動創建該目錄並在卸載后目錄為空時自動刪除。 例: DestDir: "{app}" 或 DestDir: "{app}\subdir" DestName :該參數指定了該文件被安裝到用戶的系統后的新文件名。默認情況下,安裝程序使用源文件名。因此大多數都不需要該參數。 例: DestName: "MYPROG2.EXE" CopyMode :復制文件時使用的辦法。包括: normal :這是最常用的選項。如果用戶的系統中已經有相同版本的同名文件時,原來已有的文件將不會被取代。如果原有的文件版本比要復制的新,將會詢問用戶是否替換原有文件。如果已存在的文件沒有版本信息時將不會詢問用戶就將其覆蓋。 onlyifdoesntexist :只在用戶系統中沒有該文件時復制。 alwaysoverwrite :總是覆蓋已有的文件,即使已有的文件的版本比要復制的要新。在安裝共享的系統文件時不要使用此選項。 alwaysskipifsameorolder :同normal選項相同,但有點例外的是當有已存在的文件時將不會提示用戶。使用此選項時,新版的文件將保證不會被改寫。 例:CopyMode: normal Attribs :為該文件指定屬性。屬性包括:readonly, hidden, system.。如果不指定該參數,安裝程序將不會為文件指定任何屬性。例:Attribs: hidden system FontInstall :告訴安裝程序,要復制的是一個字體文件,需要到用戶的系統中。該參數的值將會被保存到注冊表或WIN.INI中。該值必須和你在資源管理器中雙擊該字體文件時看到的字體名一致。 注:安裝程序將會自動增加" (TrueType)"在該值后面。如果不是TrueType 的字體文件,你必須使用 Flags參數標明為fontisnttruetype 。 建議你在安裝字體時,使用onlyifdoesntexist 模式的CopyMode 並加上值為uninsneveruninstall 的Flag參數。在Windows 2000/XP中,要安裝字體時要求用戶必須是超級用戶或管理員組的成員。而Windows NT 4.0 及早期的版本中則沒有這個限制,任何人都可以安裝字體。 例:Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; CopyMode: onlyifdoesntexist; Flags: uninsneveruninstall Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: allowunsafefiles :禁止編譯自動檢查不安全的文件。強烈建議你不要使用該選項,除非你絕對相信自己在干什么。 comparetimestampalso :(特別用途) 讓安裝程序在遇到已有文件與該文件具有相同版本時比較兩者的時間戳。通常,在這情況下,安裝程序不會嘗試去改寫已有的文件,但使用該選項后,當已有文件的時間戳比要安裝的文件舊時就會改寫它。當copy mode不是normal或alwaysskipifsameorolder時,該標記選項不會生效。 保留該選項只是為了向后兼容,建議不要使用。如果一定要用,當用戶改變系統的時區或發改變時制時,NT的用戶可能會遇到"existing file is newer" 的錯誤信息。另外,如果在NTFS下編譯的安裝程序在FAT上安裝時也會出現類似的錯誤,因為FAT分區只有2位的秒數精度。 confirmoverwrite :如果文件已存在,總是要求用戶確認。 deleteafterinstall :讓安裝程序正常地復制文件,但當安裝結束或非法終止后即將其刪除。這在腳本[Run]段中的程序需要解開臨時數據時相當有用。該選項不會令已有的文件在安裝過程中被刪除。該選項不能與isreadme, regserver, regtypelib, restartreplace, sharedfile, 或 uninsneveruninstall 等標記合用。 external :該標記不讓Inno Setup 將Source 參數指定的文件包含在安裝文件內。但會將該文件復制到發行介質上或用戶的系統中。詳見Source參數的說明。 fontisnttruetype :當使用FontInstall參數並且所安裝的文件不是TrueType字體時要使用此標記。 isreadme :標明該文件是一個說明文件。安裝文件中只能有一個文件帶此標記。當安裝結束后,安裝程序會詢問用戶是否想查看該說明文件。如果用戶回答是,則會使用此類文件所關聯的程序打開此文件。為此,說明文件最好是TXT或DOC等類型的文件。 注意:當安裝文件帶有restartreplace 標記或在[Setup]段中AlwaysRestart 屬性為yes 而重新啟動了計算機時,用戶將無機會看到說明文件。 noregerror :當與regserver 或 regtypelib 標記結合使用時,安裝程序不會在注冊出錯時顯示錯誤信息。 onlyifdestfileexists :僅在用戶系統中無同名文件存在時復制。該標記在你的補丁安裝中,並且你不想在用戶先前沒有安裝該文件時顯得很有用。 overwritereadonly :總是覆蓋只讀文件。當沒有該標記時,安裝程序會詢問用戶是否要覆蓋已有的只讀文件。 recursesubdirs :讓編譯器在源目錄下搜索源文件或通配文件。該標記不能與external 標記合用。 regserver :注冊OLE服務器(如ActiveX控件)。通過放置此標記,安裝程序將會找到並執行注冊DLL/OCX用的DllRegisterServer來注冊它。卸載時會調用DllUnregisterServer來卸載它。當與sharedfile 合用時,只會在其引用參照計數器為0時才將它卸載。有關的詳細說明請查閱下面的說明。 regtypelib :注冊類型函數庫(.tlb)。卸載程序將會卸載該類型庫(除非指定了uninsneveruninstall標記)。當與sharedfile 合用時,只會在其引用參照計數器為0時才將它卸載。有關的詳細說明請查閱下面的說明。 restartreplace :該標記通常在替換系統核心文件時使用。如果文件事先已經存在並且在安裝程序替換它時被鎖定的話,安裝程序會記下該文件(在WININIT.INI中或使用MoveFileEx命令,視乎是在Windows 或 Windows NT下),等到系統在下次啟動時才替換。如果遇到此情況時,安裝程序會提示用戶在安裝結束后重啟。為保持在Windows 95/98 and Me下的兼容性,請不要在此使用長文件名,因此只支持"8.3"格式。(Windows NT下就沒有這個限制) 重點:在Windows NT下, 要想使用restartreplace 標記成功替換一個正在使用的文件,用戶必須擁有管理權限。否則,將會出現錯誤並顯示如下提示: "RestartReplace failed: MoveFileEx failed; code 5." 因此,極力建議你在[Setup]段中加入"AdminPrivilegesRequired=1"命令以保證用戶具有管理級的權限。 sharedfile :(Windows 95/NT 4+ ) 使用共享文件計數特性,(在注冊表中的位置為HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs)。這使得應用軟件間可以共享一個文件時而無需擔心文件被不小心刪除。文件在每次安裝時,參照計數器將會加1,當應用軟件使用的文件在卸載時,計數器將被減1。如果計數器為0時,文件將被刪除(將經用戶確認)。大部分被安裝到Windows\System 目錄下的文件都應該使用此標記,包括 .OCX 和.DPL (Delphi 包) 文件。少數的 MFC DLLs 可以例外,不應使用該標記,反而應該使用onlyifdoesntexist 復制模式結合uninsneveruninstall 標記。否則,如果安裝最新版的特別MFC DLL 是一個發行版, 請使用alwaysskipifsameorolder復制模式,並結合uninsneveruninstall和restartreplace.標記。當在NT 3.51 中執行安裝,使用此標記將不會刪除文件。 skipifsourcedoesntexist :此標記只在與external標記連用時才生效。它令安裝程序在源文件不存在時跳該行而不會給出錯誤信息。 uninsneveruninstall :在卸載時不卸載此文件。請謹慎地使用此標記,通常會在onlyifdoesntexist復制模式時使用。它意味着在安裝一個很普通的共享文件時使用,例如CTL3DV2.DLL或一個MFC DLL,因為你將不希望卸載程序在其他軟件也使用該文件時刪除該文件。例:Flags: isreadme 備注:安裝程序會在最后一步的安裝中注冊所有regserver或regtypelib標記的文件。然而,如果[Setup]段中的AlwaysRestart指令設為yes時,或者有文件使用了restartreplace 標記時,所有要注冊的文件會在下次啟動時注冊(通過在注冊表中的RunOnce 鍵下創建一個值),當卸載一個.HLP類型的文件(Windows 的幫助文件)時,相應的.GID和.FTS文件會被自動刪除。 [Icons]段 雖然這段是可選段,但很多的安裝都需要到。它定義了所有安裝程序要在用戶的開始菜單和/或桌面中要創建的快捷方式。卸載圖標由安裝程序內部創建,因此你無須在[Icons]段中加入。默認情況下,在Windows 95/NT 4+下運行安裝程序不會創建卸載圖標,僅在NT 3.51下才會。要強行創建卸載圖標,請在[Setup]段中使用AlwaysCreateUninstallIcon指令。下面是[Icons]段的一個實例: [Icons] Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}" 下面是該段所支持參數的列表: 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" Parameters :快捷方式的命令行參數,可以包含常量。僅在Windows 95/NT 4+中可以包含引號。 例:Parameters: "/play filename.mid" WorkingDir :快捷方式的工作(開始)目錄,即程序開始時所在的目錄。如果不指定該參數或留空它, Windows 會使用一個默認的路徑,該路徑將隨Windows 的版本而變。該參數也可以包含常量。 例:WorkingDir: "{app}" HotKey :快捷方式的快捷鍵,即能夠啟動程序的組合鍵。 注:如果你改變了快捷鍵並且重裝該軟件,Windows將繼續使用舊的快捷鍵直到你取消登錄或者重新啟動系統。 例:HotKey: "ctrl+alt+k" Comment :為快捷方式指定注釋,該注釋能在Windows 2000, Me, 和以后的版本中可以彈出作為提示,在此以前的版本則將被忽略。 例:Comment: "This is my program" IconFilename :將用於顯示的自定義圖標所在的文件名。它可以是一個包含圖標的可執行文件或專門的圖標文件。如果不指定該參數,Windows 將使用默認圖標。該參數也可包含常量。 例:IconFilename: "{app}\myicon.ico" IconIndex :由0開始的IconFilename文件中的圖標索引值,默認為0。如果IconIndex 不為0而且沒有指定IconFilename,則默認IconFilename 為Filename參數的值。 例:IconIndex: 0 Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: closeonexit :當設置此標記時,安裝程序會將該快捷方式的"Close on Exit"屬性打開。該標記僅在快捷方式指向MS-DOS應用程序時生效。如果不指定此標記或dontcloseonexit 標記時,安裝程序將不會改變其"Close on Exit"屬性。 createonlyiffileexists :當設置此標記時,安裝程序只在Filename參數指定的文件存在時才嘗試創建圖標。 dontcloseonexit :和closeonexit一樣,不過就是取消"Close on Exit"屬性。 runmaximized :當設置此標記時,安裝程序會設置圖標的"Run"值為"Maximized",這樣就能使程序在啟動時達到最大化的窗口。該標記在NT 3.51中無效。 runminimized :同上面一樣,不過就是使程序啟動時最小化窗口。 uninsneveruninstall :令卸載程序在卸載時不刪除此圖標。 useapppaths :當設置此標記時,安裝程序自動將Filename參數中沒有路徑的文件名前補上注冊表中"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" 的鍵值。 例:Flags: runminimized [INI]段 這段是可選段。它定義了所有你想安裝程序設置用戶系統上的INI 文件內容,該操作將在復制完文件后進行。下面是[INI]段的一個實例: [INI] Filename: "{win}\MYPROG.INI";段: "InstallSettings"; Flags: uninsdeletesection Filename: "{win}\MYPROG.INI";段: "InstallSettings"; Key: "InstallPath"; String: "{app}" 現在是該段支持的參數列表: Filename (必須) 你想修改的.INI文件,可以包含常量。如果該參數空白,它將寫入WindowsWIN.INI文件中。 例:Filename: "{win}\MYPROG.INI" Section (必須) :你想創建鍵值的INI文件中的段名,同樣可以包含常量。 例:Section: "Settings" Key :要設置的鍵名,也可以包含常量。如果不指定該參數或留空它,則不生成鍵。 例:Key: "Version" String :要賦給鍵名的值,也可以包含常量。若不指定此參數,則不生成鍵。例:String: "1.0" Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: createkeyifdoesntexist :只在指定的鍵定的鍵名不存在時創建它。 uninsdeleteentry :在軟件卸載時刪除該鍵的內容。可以與uninsdeletesectionifempty標記合用。 uninsdeletesection :在軟件卸載時刪除該鍵所在的整個段。顯然這不是一個好主意,特別是在Windows本身使用的段中。應該在軟件私有的段中使用。 uninsdeletesectionifempty :卸載時如果段中沒有鍵內容時刪除該段。可與uninsdeleteentry標記連用。 例:Flags: uninsdeleteentry [Messages]段 [Messages]段用於定義安裝或卸載時要顯示的信息。正常情況下,你無須在你的腳本文件中創建[Messages]段,因為所有的信息都是從Inno Setup 自帶的Default.isl文件中提取的。包括在[Setup]段 中使用MessagesFile 指定的文件。然而,特殊的信息可以由你腳本文件中[Messages]段取代。若真要這樣,你必須清楚你想修改的信息ID,這可以很容易地在Default.isl搜索得到。例如,你想將"&Next >"按鈕的內容變成"&Forward >",那么你要在[Messages]段中創建如下的內容: [Messages] ButtonNext=&Forward > 有些信息包含%1、%2等內容其實是參數。你可以重新安排它們的位置或者按需要在信息中多次使用。參數中,使用兩個連續的"%"字符來嵌入一個"%"符號。"%n" 將生成一個換行符。 如果你想將Inno Setup的信息全部翻譯為其他語言,你可以直接修改Default.isl文件或在每個腳本中重寫所有的信息,將Default.isl文件做一個其他語言的副本,這樣當你想在安裝中使用該種語言時,只需簡單地在[Setup]段中使用MessagesFile指令指向該文件即可。 特殊用途的ID BeveledLabel能夠在安裝程序和卸載程序的左下角顯示一行文字。例如: [Messages] BeveledLabel=Inno Setup [LangOptions]段 [LangOptions]段用於定義指定的語言設置,例如安裝程序和卸載程序的字體。通常,你無須在你的腳本中創建[LangOptions],因為默認會使用Inno Setup 下Default.isl或[Setup]段中MessagesFile指令指向的文件中的設置。下面是[LangOptions]段的一個實例:(下面的設置采用默認值) [LangOptions] LanguageName=English LanguageID=$0409 DialogFontName=MS Shell Dlg DialogFontSize=8 DialogFontStandardHeight=13 TitleFontName=Arial TitleFontSize=29 WelcomeFontName=Verdana WelcomeFontSize=12 CopyrightFontName=Arial CopyrightFontSize=8 LanguageName是語言名,通常不需要使用,但需在多語言安裝時應用。 LanguageID是語言的數值式"語言標識",可以在http://msdn.microsoft.com/library/en-us/intl/nls_238z.asp 處看到有效的語言標識列表。當指定了LanguageName時,該項就不需要。但在多語言安裝時還是需要的。具體地,LanguageID將用於自動檢測用戶首選的語言。 DialogFontName和DialogFontSize 指定了對話框的字體和字符大小。如果指定的字體在用戶的系統中不存在,MS Shell Dlg 或MS Sans Serif字體會成為替代。(至於那一個就取決於先找到誰) DialogFontStandardHeight 將影響對話框的比例。如果你使用的字體不是13像素(在96 DPI 模式下)時,你可能需要調整DialogFontStandardHeight,否則對話框可能出現膨脹或收縮。 TitleFontName和TitleFontSize 指定了底層窗口(僅在WizardStyle=classic或WindowVisible=yes時可見)中的軟件名稱的字體和大小。如果指定的字體在用戶系統中不存在,則Arial字體將會代替。 WelcomeFontName和WelcomeFontSize 指定了在現代型向導的歡迎頁中頂部文字的字體和大小。如果指定的字體在用戶系統中不存在,則Arial字體將會代替。 CopyrightFontName和CopyrightFontSize 指定了底層窗口(僅在WizardStyle=classic或WindowVisible=yes時可見)中的版權信息的字體和大小。如果指定的字體在用戶系統中不存在,則Arial字體將會代替。 [Registry]段 這段是可選段。它定義了在復制完文件后所有需要向用戶系統注冊表中增加的鍵信息。下面是[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) Subkey (必須) :子鍵名。可以包含常量。例:Subkey: "Software\My Company\My Program" ValueType :數據類型。必須是以下中的一個: none string expandsz multisz dword binary 如果不指定類型(默認設置),安裝程序將會創建子鍵而非鍵值。這時ValueName和ValueData參數將被忽略。如果指定了string,將創建一個string (REG_SZ)類型的鍵值。如果指定了expandsz,將創建一個expand-string (REG_EXPAND_SZ)類型的鍵值,該類型最初是用在Windows NT中的,但Windows 95/98中也被支持。如果指定multisz,將創建一個(REG_MULTI_SZ)類型的鍵值。如果指定dword,則創建一個integer (REG_DWORD) 型的鍵值。如果指定binary,則創建binary (REG_BINARY) 類型的鍵值。例: ValueType: string ValueName :要創建的鍵值名,可以包含常量。如果留空,則使用"Default"值。如果ValueType 參數設置為none,該參數則被忽略。例:ValueName: "Version" ValueData :鍵值的數據。如果ValueType參數是string,expandsz或multisz,它將是一個可以包含常量的字符串。如果數據類型是dword,它將是一個十進制整數(如"123")或十六進制整數(如"$7B")。如果數據類型是binary,它將是格式為"00 ff 12 34"的十六進制的字節序列,如果數據類型為none,這將被忽略。對於一個string, expandsz, 或 multisz 類型的值,你可以在此參數中使用一個特殊的常量{olddata} {olddata}常量會用先前的注冊鍵值所取代。常量{olddata}將在你需要對一個已存在的鍵值中附加一個字符串時非常有用,例如:{olddata};{app}。如果鍵值不存在或者鍵值不是字符串類型,{olddata}常量將被無聲地移去。如果創建的鍵值是multisz 類型,但存在的鍵值卻不是multi-string 類型(如REG_SZ or REG_EXPAND_SZ)時,該常量同樣會被無聲地移去,反之亦然。對於一個multisz類型的值,你可以在此參數中使用一個稱為{break}的常量來插入一個換行符。例:ValueData: "1.0" Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: createvalueifdoesntexist :當指定該標記時,安裝程序只會在同名鍵值不存在時創建該鍵值。該標記在數據類型為none或者指定了deletevalue標記時不會生效。 deletekey :當指定該標記時,安裝程序將會先刪除整個鍵(若存在的話),包括其中的所有鍵值和子鍵。如果ValueType 為none時,它才會創建新的鍵和鍵值。 deletevalue :當指定該標記時,安裝程序會先刪除這個鍵值(若存在的話)。如果ValueType 為none並且不曾存在時,它才會創建新的鍵值。 dontcreatekey :當指定該標記時,如果指定的鍵在用戶的系統中未曾存在時,安裝程序不會嘗試去創建指定的鍵或鍵值。如果指定的鍵已經存在,將不顯示錯誤信息。典型的例子就是該標記與uninsdeletekey標記合用,以此達到在卸載時刪除鍵而在安裝時不會創建它們。 noerror :無論任何原因而導致安裝程序創建該鍵失敗都不會顯示錯誤信息。 preservestringtype :這只在ValueType參數是string或expandsz時使用。當指定了該標記后,如果鍵值不存在並且它是字符串類型時,它將被換成先前值的相同類型。 uninsclearvalue :卸載程序時,清空鍵值的數據(REG_SZ類型)。該標記不能與uninsdeletekey標記合用。 uninsdeletekey :卸載程序時,刪除整個鍵,包括其中所有的鍵值和子鍵。顯然,在Windows自身的鍵內時,這不是一個好主意。你只應在你軟件的私有鍵中使用它。 uninsdeletekeyifempty :卸載程序時,如果該鍵沒有鍵值或子鍵時將其刪除。該標記可以與uninsdeletevalue.標記合用。 uninsdeletevalue :卸載程序時刪除鍵值。該標記可以與uninsdeletekeyifempty標記合用。 注意:在Inno Setup 1.1版前,你可以在數據類型為none時使用該標記,其功能與"delete key if empty"標記一樣。但該方法不再被支持,你現在必須使用uninsdeletekeyifempty標記來完成。 例:Flags: uninsdeletevalue [Run]段和[UninstallRun]段 [Run]段是可選的,並且指定任意數目的程序在安裝成功結束后,顯示最后一個對話框前執行。 [UninstallRun]段同樣是可選段,它將會執行任意數據的程序作為卸載的第一步。除特別說明外,否則兩段的語法都相同。各程序的執行順序是以腳本中出現的順序為准的。當執行[Run]/[UninstallRun]中的項時,安裝程序將等待當前程序結束后才開始執行下一個程序,除非使用nowait標記。下面是[Run]段的一個實例: [Run] Filename: "{app}\INIT.EXE"; Parameters: "/x" Filename: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent Filename: "{app}\MYPROG.EXE"; Description: "Launch application"; Flags: postinstall nowait skipifsilent unchecked 下面是該段支持的參數列表: Filename (必須) :要招待的程序名或要打開的文件或文件夾。如果Filename不是一個.exe或.com文件,你必須在此項中使用shellexec標記,該參數可以包含常量。 例:Filename: "{app}\INIT.EXE" Description :只在[Run]段中有效。是該項的說明。該說明用於postinstall標記。如果不指定說明,安裝程序將使用默認的說明。該說明由該項的類型而定(normal or shellexec)。 例:Description: "View the README file" Parameters :為程序准備的可選命令行參數,可以包含常量。 例:Parameters: "/x" WorkingDir :啟動程序時的目錄。如果不指定該參數或留空它,它不會變為其他目錄。該參數也可以使用常量。 例:WorkingDir: "{app}" StatusMsg :只在[Run]段中生效,確定了執行程序時向導上顯示的信息。如果不指定該參數或留空它,將使用默認的信息"Finishing installation..."。 例:StatusMsg: "Installing BDE..." RunOnceId :只在[UninstallRun]段中生效,如果相同的安裝程序不止一次運行,那么"run"項將被復制到卸載記錄文件中。通過指定一個字符串給RunOnceId,你可以保證特別的[UninstallRun]項在卸載時只執行一次。例如,若兩個或多個"run"項在卸載記錄文件中有一個RunOnceId 設為"DelService",只有最后的RunOnceId 中的"DelService"被執行,其余的都會被忽略。注意:RunOnceId中的內容是大小寫敏感的。 例:RunOnceId: "DelService" Flags :該參數是一個額外的可選項,可用空格隔開多個選項。下面是該參數所支持的選項: hidewizard :如果指定此參數,向導會在程序運行期間被隱藏。 nowait :如果指定此參數,安裝程序不會等該進程結束就處理下個[Run]項或結束安裝。該標記不能與waituntilidle合用。 shellexec :該標記在Filename不是一個可直接執行的文件時才需要。當設置該標記時,Filename可以是一個文件夾或任何已注冊了的文件類型,包括.hlp, .doc,和其他。文件將被用戶系統中與該類型關聯的程序打開,結果與用戶在資源管理器中雙擊該文件一樣。當在Filename 中使用文件夾名時,建議你在其后加上"\"字符(如"{group}\"),以保證同名的程序不會被執行。同樣值得注意的是文件夾只能在Windows 95/NT 4+中打開,因為它是Explorer shell的新特性。 使用shellexec標記的一點不利就是:它不能等到進程結束。因此,它執行的效果總是好似指定了nowait標記一樣。 skipifdoesntexist :如果指定該標記,並且Filename不存在時,安裝程序將不會顯示錯誤信息。該標記只應用在[Run]段,因為卸載程序在[UninstallRun]項執行失敗時從不顯示出錯信息的。 runmaximized :如果指定該標記,執行的程序或打開的文件的窗口將被最大化。 runminimized :如果指定該標記,執行的程序或打開的文件的窗口將被最小化。 waituntilidle :如果指定該標記,安裝程序將會暫停執行直到沒有需要用戶輸入時,並非進程結束。(這是調用Win32函數的WaitForInputIdle 來實現的) 不能與nowait合用。 postinstall :只在[Run]段有效。它令到安裝程序在安裝結束頁中創建一個復選項,讓用戶能夠選擇該項來決定是否執行該項。以前該標記稱為showcheckbox.。 [Files]段中項的isreadme標記此時將會擱置。如果編譯器偵測到某項帶有isreadme標記,它會去掉[Files]中的isreadme 標記,代之以在[Run]段列表的開頭處生成一個新項。該生成的[Run]項以shellexec, skipifdoesntexist, postinstall and skipifsilent標記運行該readme文件。 unchecked :只在[Run]段中有效。指示安裝程序在開始時取消勾選該復選框。在用戶勾選該復選框后才執行該項。該標記在postinstall 標記沒有指定時被忽略。 skipifsilent :只在[Run]段中有效。指示安裝程序如果以后台程序方式運行時跳過此項。 skipifnotsilent :只在[Run]段中有效。指示安裝程序如果以非后台程序方式運行時跳過此項。 例:Flags: postinstall nowait skipifsilent [UninstallDelete]段 這段是可選段。用於定義卸載程序要刪除的其他文件或目錄,還有那些你的程序所安裝的。刪除你程序中創建的.INI文件是該段最普通的用法。卸載程序會在卸載的最后一步處理這些項。下面是該段的一個實例: [UninstallDelete] Type: files; Name: "{win}\MYPROG.INI" 以下是該段所支持的參數列表: Type (必須) :指定卸載程序要刪除的東西。它必須是以下中的一種: files :指定一個特定的文件或通配文件。 filesandordirs :功能與files相同,不過就是包括匹配的目錄及其下的所有文件和子目錄。 dirifempty :當使用此標記時,Name參數必須是一個目錄名,但就不可以包括通配符。只刪除空目錄。 例:Type: files Name (必須) :要刪除的文件或目錄名。 注意:在此不要冒險使用一個通配符去刪除{app}目錄中的所有文件。強烈建議你不要這樣做的原因有兩個:用戶不贊賞他們在軟件目錄中放置的文件在沒有警告下就將其刪除(他們卸載它可能只是要將其移到其他驅動器中),最好是讓用戶在需要時自己手動去刪除。同樣,如果因為用戶出錯而將軟件安裝到一個錯誤的目錄下時(如C:\WINDOWS),這樣如果執行卸載,將會造成慘重的后果。因此,再次呼吁,不要這樣做! 例:Name: "{win}\MYPROG.INI"
Inno Setup 5.22安裝腳本示例
[Setup]
;應用程序的標題,顯示在安裝屏幕的左上角以及安裝向導中
AppName=Inno Setup
漢化增強版
;應用程序的標題,包含程序的版本號
AppVerName=Inno Setup 5.2.2
漢化增強版
;默認開始菜單文件夾名
DefaultGroupName=Inno Setup
漢化增強版
;選擇目標位置向導面中的默認目錄名
DefaultDirName={pf}\Inno Setup
5
;安裝程序編譯器將生成的.EXE文件輸出目錄
OutputDir=.\
;生成的安裝程序文件名字
OutputBaseFilename=InnoSetup_522_HA
;固實壓縮
SolidCompression=yes
Compression=lzma/max
;是否顯示一個不創建任何圖標選擇框
AllowNoIcons=yes
InfoBeforeFile=embedded\InfoBefore.txt
WizardImageFile=embedded\dreams8.bmp
WizardSmallImageFile=embedded\dreams8smallimage.bmp
SetupIconFile=embedded\dreams8.ico
UninstallDisplayIcon=embedded\dreams8.ico
;備注版本信息
VersionInfoCompany=HTTP://DREAMS8.COM
VersionInfoDescription=Inno
Setup 漢化增強版
VersionInfoVersion=5.2.2.0
VersionInfoCopyright=Copyright (C)
2006-2007 似水年華
Encryption=true
Password=http://www.dreams8.com
[Files]
Source: Dreams8.CoM; DestDir: " "; Flags: dontcopy
Source:
{app}\JanHKill.exe; DestDir: {app}; Flags: ignoreversion
Source:
{app}\psvince.dll; DestDir: {app}; Flags: ignoreversion noencryption
Source:
{app}\Compil32.exe; DestDir: {app}; Flags: ignoreversion
Source:
{app}\Default.isl; DestDir: {app}; Flags: ignoreversion
Source:
{app}\isbunzip.dll; DestDir: {app}; Flags: ignoreversion
Source:
{app}\isbzip.dll; DestDir: {app}; Flags: ignoreversion
Source:
{app}\ISCC.exe; DestDir: {app}; Flags: ignoreversion; Check: not
IsISPP('ISCC.exe')
Source: {app}\ISCmplr.dll; DestDir: {app}; Flags:
ignoreversion; Check: not IsISPP('ISCmplr.dll')
Source: {app}\ISCrypt.dll;
DestDir: {app}; Flags: ignoreversion
Source: {app}\ISetup.hlp; DestDir:
{app}; Flags: ignoreversion
Source: {app}\ISetup.chm; DestDir: {app}; Flags:
ignoreversion
Source: {app}\isfaq.htm; DestDir: {app}; Flags:
ignoreversion
Source: {app}\islzma.dll; DestDir: {app}; Flags:
ignoreversion
Source: {app}\isunzlib.dll; DestDir: {app}; Flags:
ignoreversion
Source: {app}\iszlib.dll; DestDir: {app}; Flags:
ignoreversion
Source: {app}\license.txt; DestDir: {app}; Flags:
ignoreversion
Source: {app}\Setup.e32; DestDir: {app}; Flags:
ignoreversion
Source: {app}\SetupLdr.e32; DestDir: {app}; Flags:
ignoreversion
Source: {app}\whatsnew.htm; DestDir: {app}; Flags:
ignoreversion
Source: {app}\WizModernImage-IS.bmp; DestDir: {app}; Flags:
ignoreversion
Source: {app}\WizModernImage.bmp; DestDir: {app}; Flags:
ignoreversion
Source: {app}\WizModernSmallImage-IS.bmp; DestDir: {app};
Flags: ignoreversion
Source: {app}\WizModernSmallImage.bmp; DestDir: {app};
Flags: ignoreversion
Source: {app}\Examples\64Bit.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\64BitThreeArch.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\64BitTwoArch.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\CodeAutomation.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\CodeClasses.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\CodeDlg.iss;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\CodeDll.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\CodeExample1.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\Components.iss;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\Example1.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\Example2.iss; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\Example3.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\Example4.iss;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\Example5.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\ISPPExample1.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\ISPPExample1License.txt; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\Languages.iss; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\MyDll.dll; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\MyProg-IA64.exe;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\MyProg-x64.exe; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\MyProg.exe; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\MyProg.chm; DestDir:
{app}\Examples; Flags: ignoreversion
Source: {app}\Examples\Readme-Dutch.txt;
DestDir: {app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\Readme-German.txt; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\Readme.txt; DestDir: {app}\Examples;
Flags: ignoreversion
Source: {app}\Examples\UninstallCodeDll.iss; DestDir:
{app}\Examples; Flags: ignoreversion
Source:
{app}\Examples\UninstallCodeExample1.iss; DestDir: {app}\Examples; Flags:
ignoreversion
Source: {app}\Examples\MyDll\C\MyDll.c; DestDir:
{app}\Examples\MyDll\C; Flags: ignoreversion
Source:
{app}\Examples\MyDll\C\MyDll.def; DestDir: {app}\Examples\MyDll\C; Flags:
ignoreversion
Source: {app}\Examples\MyDll\C\MyDll.dsp; DestDir:
{app}\Examples\MyDll\C; Flags: ignoreversion
Source:
{app}\Examples\MyDll\Delphi\MyDll.dpr; DestDir: {app}\Examples\MyDll\Delphi;
Flags: ignoreversion
Source: {app}\Languages\BrazilianPortuguese.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Catalan.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Czech.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\Danish.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Dutch.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\English.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Finnish.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\French.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\German.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Hungarian.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Italian.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\Norwegian.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Polish.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Portuguese.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\Russian.isl; DestDir: {app}\Languages;
Flags: ignoreversion
Source: {app}\Languages\Slovak.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Slovenian.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Basque.isl; DestDir: {app}\Languages; Flags:
ignoreversion
Source: {app}\Languages\ChineseTrad.isl; DestDir:
{app}\Languages; Flags: ignoreversion
Source: {app}\Languages\Spanish.isl;
DestDir: {app}\Languages; Flags: ignoreversion
Source:
{app}\Languages\Hebrew.isl; DestDir: {app}\Languages; Flags:
ignoreversion
;Source: {app}\disasm.exe; DestDir: {app}; Flags:
ignoreversion
;Source: {app}\unCompiledCode.cmd; DestDir: {app}; Flags:
ignoreversion
;增加Inno Setup 解包套裝
Source: {app}\IsUnp\ISUnp.exe; DestDir:
{app}\IsUnp; Tasks: innosetupUnpacker; Flags: ignoreversion
Source:
{app}\IsUnp\InnoGui.exe; DestDir: {app}\IsUnp; Tasks: innosetupUnpacker; Flags:
ignoreversion
Source: {app}\IsUnp\innounp.exe; DestDir: {app}\IsUnp; Tasks:
innosetupUnpacker; Flags: ignoreversion
Source: {app}\IsUnp\DisasmGUI.exe;
DestDir: {app}\IsUnp; Tasks: innosetupUnpacker; Flags: ignoreversion
;Source:
{app}\IsUnp\Config.ini; DestDir: {app}\IsUnp; Tasks: innosetupUnpacker; Flags:
ignoreversion
;修改備注
Source: {app}\Dreams8.e32; DestDir: {app}; DestName:
SetupLdr.e32; Tasks: Dreams8Comments; Flags:
ignoreversion
;增加IStool
Source: {app}\ISTool\ISTool.exe; DestDir:
{app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\calltips.txt; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\History.rtf; DestDir: {app}\ISTool; Tasks:
innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\ISSLexer.dll;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\ISTool.chm; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\istool-en.lng; DestDir: {app}\ISTool;
Tasks: innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\isxdl.htm;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\isxdl.iss; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\isxdl.dll; DestDir: {app}\ISTool; Tasks:
innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\iwz2issl.dll;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion
Source:
{app}\ISTool\License.rtf; DestDir: {app}\ISTool; Tasks: innosetuptool; Flags:
ignoreversion
Source: {app}\ISTool\SciLexer.dll; DestDir: {app}\ISTool;
Tasks: innosetuptool; Flags: ignoreversion
Source: {app}\ISTool\簡體中文.lng;
DestDir: {app}\ISTool; Tasks: innosetuptool; Flags: ignoreversion ;AfterInstall:
MyAfterInstall
[Messages]
;下畫線文字說明
BeveledLabel=夢想吧 似水年華 <A
href="http://www.dreams8.com/">WWW.DREAMS8.COM
;卸載對話框說明
ConfirmUninstall=您真的想要從電腦中卸載INNO
SETUP嗎?%n%n按 [是] 則完全刪除 %1 以及它的所有組件; %n按 [否]
則讓軟件繼續留在您的電腦上.
;定義解壓說明
StatusExtractFiles=解壓並復制主程序文件及相關庫文件...
[Registry]
Root: HKCR; Subkey: .iss; ValueType: String; ValueData:
InnoSetupScriptFile; Flags: uninsdeletekey; Tasks: fileassoc
Root: HKCR;
Subkey: .iss; ValueName: Content Type; ValueType: String; ValueData: text/plain;
Tasks: fileassoc
Root: HKCR; Subkey: InnoSetupScriptFile; ValueType: String;
ValueData: Inno Setup 腳本; Flags: uninsdeletekey; Tasks: fileassoc
Root: HKCR;
Subkey: InnoSetupScriptFile\DefaultIcon; ValueType: String; ValueData:
{app}\Compil32.exe,1; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\open\command; ValueType: String; ValueData:
"""{app}\Compil32.exe"" ""%1"""; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\Compile; ValueType: String; ValueData: 編譯(&L);
Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\Compile\command; ValueType: String; ValueData:
"""{app}\Compil32.exe"" /cc ""%1"""; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithInnoSetup; ValueType: String; ValueData: 使用
&Inno Setup 打開; Tasks: fileassoc
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithInnoSetup\command; ValueType: String;
ValueData: """{app}\Compil32.exe"" ""%1"""; Tasks: fileassoc
Root: HKCR;
Subkey: .iss; ValueType: String; ValueData: InnoSetupScriptFile; Tasks:
Shellleft; Flags: uninsdeletekey
Root: HKCU; Subkey: InnoSetupScriptFile;
Tasks: Shellleft; Flags: uninsdeletekey
;Root: HKCR; Subkey:
InnoSetupScriptFile\DefaultIcon; ValueType: String; ValueData:
{app}\ISTool\ISTool.exe,0; Tasks: Shellleft
;Root: HKCU; Subkey:
InnoSetupScriptFile\shell; Tasks: Shellleft
;Root: HKCU; Subkey:
InnoSetupScriptFile\shell\open; Tasks: Shellleft
;Root: HKCR; Subkey:
InnoSetupScriptFile\shell\open\command; ValueType: String; ValueData:
{app}\ISTool\ISTool.exe %1; Tasks: Shellleft
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithISTool; ValueType: String; ValueData: 使用
&ISTool 打開; Tasks: Shellleft
Root: HKCR; Subkey:
InnoSetupScriptFile\shell\OpenWithISTool\command; ValueType: String; ValueData:
{app}\ISTool\ISTool.exe %1; Tasks: Shellleft
[Run]
Filename: {app}\ISTool\ISTool.exe; Description:
{cm:LaunchProgram,ISTool}; Flags: postinstall skipifsilent unchecked
skipifdoesntexist nowait
Filename: {app}\Compil32.exe; Parameters: /ASSOC;
StatusMsg: {cm:AssocingFileExtension,Inno Setup,.iss}; Tasks:
fileassoc
Filename: {app}\Compil32.exe; WorkingDir: {app}; Description:
{cm:LaunchProgram,Inno Setup}; Flags: postinstall skipifsilent nowait
[UninstallRun]
Filename: {app}\Compil32.exe; Parameters: /UNASSOC;
RunOnceId: RemoveISSAssoc
[UninstallDelete]
Type: files; Name: {app}\Config.ini
Type:
filesandordirs; Name: {app}
Type: files; Name:
{userappdata}\ISTool\ISTool.ini
Type: filesandordirs; Name:
{userappdata}\ISTool
[Icons]
Name: {group}\ISTool; Filename: {app}\ISTool\ISTool.exe; Flags:
createonlyiffileexists
Name: {group}\Download DLL 文檔; Filename:
{app}\ISTool\isxdl.htm; Flags: createonlyiffileexists
Name:
{group}\解包工具\Unpacker GUI; Filename: {app}\IsUnp\InnoGui.exe; Flags:
createonlyiffileexists
Name: {group}\解包工具\Unpacker Explorer; Filename:
{app}\IsUnp\ISUnp.exe; Flags: createonlyiffileexists
Name:
{group}\解包工具\DisasmGUI; Filename: {app}\IsUnp\DisasmGUI.exe; Flags:
createonlyiffileexists
Name: {group}\Inno Setup 編譯器; Filename:
{app}\Compil32.exe; WorkingDir: {app}
Name: {group}\Inno 5.1.5 幫助文檔;
Filename: {app}\ISetup.hlp
Name: {group}\Inno Setup 幫助文檔; Filename:
{app}\ISetup.chm
Name: {group}\卸載INNO SETUP; Filename:
{app}\unins000.exe
Name: {userdesktop}\Inno Setup 編譯器; Filename:
{app}\Compil32.exe; WorkingDir: {app}; Tasks: desktopicon
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; Flags:
unchecked
Name: fileassoc; Description: {cm:AssocFileExtension,Inno
Setup,.iss}
Name: innosetuptool; Description: 安裝 ISTOOL漢化版(&T);
GroupDescription: ISTOOL漢化版:; Flags: checkablealone
Name: Shellleft;
Description: 關聯 *.ISS 文件到右鍵用ISTOOL打開(&I); GroupDescription: ISTOOL漢化版:;
Flags: dontinheritcheck
Name: innosetupUnpacker; Description: 安裝 Inno Setup
解包套裝(&U); GroupDescription: 附加安裝:
Name: Dreams8Comments; Description: 修改
備注為DREAMS8.COM(&W); GroupDescription: 附加安裝:; Flags: unchecked
[Code]
//增加判斷是否存在程序--------------------------------------------------------
function
IsModuleLoaded(modulename: String ): Boolean;
external <A
href="mailto:'IsModuleLoaded@files:psvince.dll">'IsModuleLoaded@files:psvince.dll
stdcall';
function InitializeSetup(): boolean;
var
IsAppRunning:
boolean;
begin
Result:= true;
IsAppRunning:=
IsModuleLoaded('Compil32.exe'); //程序文件名
while IsAppRunning do
begin
if
MsgBox('INNO SETUP正在運行,繼續安裝前請先關閉它!'#13'[建議先卸載]要繼續安裝嗎?' #13#13
' <A
href="http://www.dreams8.com'/">WWW.DREAMS8.COM', mbConfirmation,
MB_OKCANCEL) = IDOK then
IsAppRunning:= IsModuleLoaded('Compil32.exe')
//程序文件名
else
begin
IsAppRunning:= false;
Result:=
false;
end;
end;
end;
//增加關於按鈕及網站鏈接-------------------------------------------------------
procedure
AboutButtonOnClick(Sender: TObject);//當關於鍵被按下時產生的行為
begin
MsgBox('夢想吧|DREAMS8 人人為我|我為人人'#13#13 'Copyright (C) 2007 <A
href="http://www.dreams8.com'/">www.dreams8.com', mbInformation,
mb_Ok);
end;
//完成頁面
procedure CloseQuery(Sender: TObject; var CanClose:
Boolean);
begin
CanClose := true;
PostMessage(WizardForm.Handle, 18, 0, 0);
end;
procedure URLLabelOnClick(Sender: TObject); //當URL鍵被按下時產生的行為
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://dreams8.com',
'', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
var
InfoLabel: TNewStaticText;
procedure InitializeWizard();
var
AboutButton, CancelButton:
TButton;
URLLabel: TNewStaticText;
//建立一個url的按鈕
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText:
TNewStaticText;
begin
//頁面字體顏色
WizardForm.PAGENAMELABEL.Font.Color:=
clred;
WizardForm.PAGEDESCRIPTIONLABEL.Font.Color:=
clBlue;
//安裝提示字體顏色
WizardForm.WELCOMELABEL1.Font.Color:=
clGreen;
WizardForm.WELCOMELABEL2.Font.Color:= clOlive;
{ 其它自定義控制 }
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
AboutButton.Left :=
WizardForm.ClientWidth - CancelButton.Left -
CancelButton.Width;
AboutButton.Top := CancelButton.Top;
//按扭在窗體上的位置
//按扭寬&高
AboutButton.Width :=
CancelButton.Width;
AboutButton.Height :=
CancelButton.Height;
AboutButton.Caption :=
'關於(&A)';//按扭標題
AboutButton.OnClick := @AboutButtonOnClick;
//事件激活
AboutButton.Parent := WizardForm;
//添加一個Labe標簽------------------------------------------------------------
URLLabel
:= TNewStaticText.Create(WizardForm);
URLLabel.Top := AboutButton.Top +
AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left +
AboutButton.Width + 8;
URLLabel.Caption := '訪問
夢想吧Dreams8';
URLLabel.Font.Style := URLLabel.Font.Style +
[fsUnderLine];
URLLabel.Font.Color := clBlue;
URLLabel.Font.size :=
9;
URLLabel.Cursor := crHand;
URLLabel.OnClick :=
@URLLabelOnClick;
URLLabel.Parent := WizardForm;
//完成頁面的鏈接地地址
InfoLabel :=
TNewStaticText.Create(WizardForm);
InfoLabel.Caption :=
'HTTP://DREAMS8.COM';
InfoLabel.Cursor := crHand;
InfoLabel.OnClick :=
@URLLabelOnClick;
InfoLabel.Parent := WizardForm;
InfoLabel.Font.Color :=
clBlue;
InfoLabel.Color:= WizardForm.MainPanel.Color;
InfoLabel.Top :=
WizardForm.BEVEL.Top - ScaleY(20);
InfoLabel.Left :=
WizardForm.WELCOMELABEL1.Left;
WizardForm.OnCloseQuery:= @CloseQuery;
BackgroundBitmapImage :=
TBitmapImage.Create(MainForm);
BackgroundBitmapImage.AutoSize :=
True;
BackgroundBitmapImage.Bitmap :=
WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Left :=
50;
BackgroundBitmapImage.Top := 100;
BackgroundBitmapImage.Parent :=
MainForm;
BackgroundBitmapText :=
TNewStaticText.Create(MainForm);
BackgroundBitmapText.Caption :=
'TBitmapImage';
BackgroundBitmapText.Left :=
BackGroundBitmapImage.Left;
BackgroundBitmapText.Top :=
BackGroundBitmapImage.Top + BackGroundBitmapImage.Height +
8;
BackgroundBitmapText.Parent := MainForm;
//去掉關於菜單
WizardForm.BORDERICONS := [biHelp, biSystemMenu,
biMinimize];
// 自動輸入密碼
WizardForm.PasswordEdit.Text :=
'http://www.dreams8.com';
end;
procedure
MyAfterInstall();
begin
DeleteFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'));
CreateDir(ExpandConstant('{userappdata}\ISTool'));
SaveStringToFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'),
#13#10 + '[Prefs]',
True);
SaveStringToFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'),
#13#10 + ExpandConstant('InnoFolder={app}'),
True);
SaveStringToFile(ExpandConstant('{userappdata}\ISTool\ISTool.ini'),
#13#10 + ExpandConstant('LanguageFile={app}\ISTool\簡體中文.lng'),
True);
RegWriteStringValue(HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1','Inno
Setup: Setup Version', '5.2.2');
end;
//procedure CurUninstallStepChanged(CurUninstallStep:
TUninstallStep);
procedure CurStepChanged(CurStep:
TSetupStep);
begin
if CurStep=ssPostInstall
then
begin
if not IsTaskSelected('innosetuptool')
then
RegDeleteKeyIncludingSubkeys(HKCR,
'InnoSetupScriptFile\shell\OpenWithISTool');
end;
end;
procedure
DeinitializeUninstall();
begin
RegDeleteKeyIncludingSubkeys(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno
Setup 5_is1');
end;
//安裝程序按取消時`直接退出~而無選項
procedure CurPageChanged(CurPageID:
Integer);
begin
if CurPageID = wppassword
then
begin
WizardForm.NextButton.OnClick(WizardForm);
end;
if
CurPageID=wpFinished then
begin
InfoLabel.Visible:=
true
end
else
begin
InfoLabel.Visible:= false;
end;
end;
function IsISPP(Filename: String): Boolean;
var
Version:
String;
begin
if GetVersionNumbersString(ExpandConstant('{app}\' +
Filename), Version) then
Result := (Version <>
'0.0.0.0')
else
Result := False;
end;
轉自:http://www.360doc.com/content/13/0425/22/4221543_280946616.shtml