說明:本文用的Inno Setup
的版本是5.1.8
。示例程序位于Inno Setup V5.18
安裝目錄"Examples
目錄下。本文對筆者轉載的一篇文章《Inno Setup
使用教程》根據筆者實際工作中用到的東西進行縮減和修改而成。
一.介紹
Inno Setup是一個開源免費的安裝程序制作工作。安裝程序是以腳本的方式創建的,其擴展名為.iss(Inno Setup Script)。
二.常量
Inno Setup有一些自帶的常量,它們被一對大括號({})括起來,當安裝程序被啟動的時候,這些常量將被轉換成其真實的值,這依賴于用戶的選擇和系統配置,例如,{win} 這個常量在絕大多數的系統當中將被轉換成“C:"WINDOWS”。
1. 目錄常量
(1){app}
應用程序目錄,這是用戶在安裝向導的選擇安裝目錄頁里面所選擇的。這是Inno Setup中最常用的一個變量。
(2){win}
系統的Windows目錄,一般為“C:"WINDOWS”。例如:如果你使用了 {win}"MYPROG.INI ,而你的 Windows 目錄是“C:"WINDOWS”,那么安裝程序就會將它轉換成“C:"WINDOWS"MYPROG.INI”。
(3){sys}
系統的 Windows 系統(System)目錄(在 Windows NT/2000 下是 System32)。 例如:如果你使用了 {sys}"CTL3D32.DLL,并且系統的 Windows 系統目錄是“C:"WINDOWS"SYSTEM”,那么安裝程序就會將它轉換成“C:"WINDOWS"SYSTEM"CTL3D32.DLL”。
(4){src}
指向安裝程序所在的位置。
(5){sd}
系統驅動器,它是指 Windows 被安裝到的那個驅動器,典型的是“C:”,對于 Windows NT/2000,這個常量同系統的環境變量“SystemDrive”是等效的。
(6){pf}
也是Inno Setup中比較常用的一個常量,這個路徑是系統的Program Files目錄,典型的是“C:"Program Files”。
(7){cf}
公共文件夾(Common Files),這個路徑是系統的 Common Files 文件夾,典型的是“C:"Program Files"Common Files”。
(8){tmp}
臨時目錄,這個目錄并不是用戶的 TEMP 環境變量指向的目錄,而是安裝程序在啟動時在用戶的臨時目錄下建立的一個子目錄(它有一個類似于“ C:"WINDOWS"TEMP"IS-xxxxx.tmp”這樣的名字),在安裝程序退出時所有的文件和子目錄將會被刪除。對于在 [Run] 段里面要被執行且在安裝以后又不需要的程序文件來說這個功能是非常有用的。
(9){fonts}
字體目錄。
(10){dao}
DAO 目錄,當安裝程序運行在 Windows 95/NT 4+ 上時,它被等效為 {cf}"Microsoft Shared"DAO,當運行于 Windows NT 3.51 時,它被等效為 { win}"MSAPPS"DAO。
2. Shell文件夾常量
筆者尚未用到,在此不作講述。
3. 其它的常量
(1){"}
一個反斜杠字符,請參見本頁前面提到的關于常量 {"} 和單字符 " 在使用上有何不同的說明。
(2){%NAME}
內嵌一個環境變量,這個 NAME 是要使用的環境變量的名字。如果在用戶的系統當中指定的環境變量不存在,這個常量就會被一個空的字符串所替代。
(3){computername}
安裝程序正在運行的計算機的名稱(就是“GetComputerName”函數的返回值)。
(4){groupame}
用戶在安裝程序向導的選擇程序組頁選擇的程序組的名稱,這個是不同于 {group} 的,它不包括路徑。
(5){hwnd}
(專門用途)傳送安裝程序背景窗口的窗口句柄。
(6){reg:HKxx"SubkeyName,ValueName|DefaultValue}
HKxx 指定根鍵(root key),參見 [Registry] 段 文檔所列出的根鍵。
SubkeyName 指定要讀取的子鍵的名稱。
ValueName 指定要讀取的值的名稱,要讀取一個鍵的默認值就讓 ValueName 為空。
DefaultValue 如果指定的注冊表值不存在或者它不是一個字符串類型(REG_SZ 或者 REG_EXPAND_SZ),則嵌入這個值。
如果你希望包括一個逗號,豎線(字符“|”)或大括號閉弧“}”在常量里面,你必須通過“%-編碼” 形式用“%”后緊跟一個兩位的16進制代碼轉譯后替換原來的字符,一個逗號是“%2c”,一個豎線符是“%7c”,一個大括號閉弧是“%7d”。 DefaultValue 可以包括常量,然而,如上所訴內嵌的常量的大括號的閉弧
(“}”) 必須被改成“%7d”才可以。
(7){srcexe}
安裝程序的文件名全稱(包括全程路徑和文件名),例如“C:"SETUP.EXE”。
(8){username}
運行安裝程序的用戶的名稱(函數 GetUserName 的返回值)。
二.腳本的段
Inno Setup的腳本的段分為幾段,下面看一個Inno Setup自帶的例子:Example1.iss,其內容如下:
; -- Example1.iss --
; Demonstrates copying 3 files and creating an icon.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}"My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}"MyProg.exe
Compression=lzma
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
[Icons]
Name: "{group}"My Program"; Filename: "{app}"MyProg.exe"
從上面可以看出,iss文件是由一段一段的腳本組成的,例如,在上例中寫了三段,分別為:[Setup]、[Files]和[Icons]。
在本小節中只是粗略的介紹一下這幾段的作用,至于具體每一段的使用,在本小節不予講述。
1. [Setup] 段
這個段包括了安裝和卸載程序所使用的全局設置,并且有些關鍵字在你建立的安裝程序中是必須要用到的。
2. [Dirs] 段
這個段是可選的,而且通常對于大多數簡單的應用程序來書不是必需的。這個段是用來創建除用戶選擇的應用程序目錄以外的其它的附加的目錄,它是被自動創建的。這個段所創建的子目錄是可以脫離主應用程序而共同使用的目錄。當然在 [Files] 段里面的文件被復制到某個目錄之前你并不一定要創建它,然而在卸載程序的時候在 [Dirs] 和 [UninstallDelete] 段里面沒有指定的目錄就不會被刪除。
3. [Files] 段
這個段是可選的,但對于大多數安裝程序來說是必不可少的。在這里定義了安裝程序需要復制到用戶的系統當中的全部文件。
在安裝期間,卸載程序和數據被自動的復制到應用程序的目錄當中去,因此你不必手工的將它們添加到 [Files] 段。
4. [Icons] 段
這個段是可選的,但對于大多數安裝程序來說是必不可少的。它定義了所有的安裝程序要在用戶系統中創建的程序管理器/開始菜單的圖標。它也能被用來在其它的位置創建應用程序圖標(快捷方式),比如就像桌面。
卸載圖標是由安裝程序內部創建的,這樣一來你就不需要在 [Icons] 段里面手工的添加它。默認情況下,安裝程序運行在 Windows 95/NT 4+ 的時候是不創建卸載圖標的 ――除了安裝程序運行于 Windows NT 3.51 的時候。 要強制創建一個卸載圖標,請使用 [Setup] 段里面的 AlwaysCreateUninstallIcon 關鍵字。
5. [INI] 段
此段是可選的,它定義了一些 .INI 文件項,在文件被復制以后安裝程序在用戶的系統中的設定。
6. [InstallDelete] 段
它使用的是和 [UninstallDelete] 段相同的格式,不同的是它是在安裝程序的第一步被處理的。
7. [Messages] 段
[Messages] 段是用于定義安裝程序和卸載程序所顯示的消息。通常你不需要在你的腳本文件里面創建 [Messages] 段,默認情況下所有的顯示消息都由 Inno Setup 包含的文件 Default.isl 定義。 (或由 [Setup] 段的關鍵字 MessagesFile 指定的任何文件)。
8. [Registry] 段
這個段是可選的,他定義了一些注冊表項,用于在復制完文件之后創建在用戶的系統中。
9. [Run] & [UninstallRun] 段
[Run] 段是可選的,指定任意數量的程序在成功安裝程序以后及顯示結束對話框之前被執行。同樣 [UninstallRun] 段也是可選的,指定任意數量的程序在“卸載程序”的第一步時被執行。除非下面有其它說明,兩個段共有相同的語法。
每個程序按照你的腳本編排的順序被執行,當出路 [Run]/[UninstallRun] 的項時,安裝程序將會等到當前的程序終止之后才處理下一個,當然除非使用了 nowait 標記。
10. [UninstallDelete] 段
該段是可選的。該段是用來定義一些附加的除了那些被安裝的應用程序之外的要被卸載程序刪除的文件或目錄。使用該段來刪除由你的應用程序創建的 .INI 文件是一個常用的辦法。卸載程序在卸載過程的最后一步處理這些項。
三.注釋和段內參數
Inno Setup中將以“;”開始的行作為注釋行,例如在上小節中的Example1.iss中的前幾行都是該例的注釋行。
腳本文件中的所有的段,除了[Setup],都是以行位單位,每行分為若干個參數。例如Example1.iss的[Files]段內容如下:
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
從上面的腳本代碼可以看出,每個參數都有一個名稱,例如Source、DestDir,后面緊跟一個冒號,然后是它的值。當一行有多個參數時,參數之間則用分號(;)隔開。
參數的值多數情況下是用引號擴起來("),但使用引號也是可選的。然而如果這個參數的值里面的前導符號或者后綴符號是空格的話就必須加上引號了。另外需要說明的是使用內嵌的分號和引號,要插入一個引號則使用兩個連續的引號來代替。
四.簡單實例講解
在本小節中,我們講述Inno Setup中的一個簡單例子,即前面各節提及的Example.iss。首先看一下[Files]段
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}"My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}"MyProg.exe
Compression=lzma
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output
上述腳本代碼中,AppName為應用程序的名稱,在Inno Setup5.1.8中,點擊運行按鈕運行時,可以看到在安裝窗口的左上角顯示的是應用程序的名稱,窗口如下所示:

AppVerName為應用程序的版本號,也是在安裝向導的首頁顯示的。DefaultDirName為默認的路徑,點擊上圖的“繼續”按鈕,安裝窗口如下:

DefaultDirName即為上圖中的默認的安裝路徑。
Compression表示壓縮的類型, 指示現在默認為lzma。基本上在所有的實例中,lzma 壓縮較其它支持的壓縮方法好。先前默認為 zip。(ML) 可執行文件現在壓縮率更高。
DefaultGroupName表示的是開始菜單文件夾,在上圖中點擊“繼續”按鈕,進入的窗口如下:

posted on 2007-11-23 11:41
阿蜜果 閱讀(20201)
評論(2) 編輯 收藏 所屬分類:
Inno Setup