1. 程式人生 > >Inno Setup教程

Inno Setup教程

Inno Setup 支援多語言安裝。[Languages] 段用來定義安裝程式中可使用的語言。
安裝程式用下列順序確定在訊息中預設使用的語言:

1. 搜尋 LanguageID 設定的語言 (通常指定在語言檔案 .isl 的 [LangOptions] 段) 匹配首選語言標識和當前使用者介面語言或本地 (根據 LanguageDetectionMethod) 子語言標識兩者。
2. 如果未發現,只搜尋匹配的首選語言標識。如果兩個或多個可用文有相同的首選語言標識,它將使用在 [Languages] 段中列出的第一個。

3. 如果未發現,預設為指定在 [Languages] 段的第一個語言。

如果 [Setup] 段的 ShowLanguageDialog 指示設定為 yes (預設),將顯示一個選擇語言對話方塊,使使用者有機會忽略語言安裝選擇。

ShowLanguageDialog 指示設定為 yes (預設),將顯示一個選擇語言對話方塊,使使用者有機會忽略語言安裝選擇。

下面是 [Languages] 段的一個示例。它定義兩個語言: 簡體中文,根據標準的漢化版的 Default.isl 檔案,以及英語,原版的語言檔案,漢化版中已包括。

[Languages]

Name: "chs"; MessagesFile: "compiler:Default.isl"

Name: "en"; MessagesFile: "compiler:English.isl"


[Messages]

[Messages] 段用於定義顯示在安裝程式和解除安裝程式中的訊息。通常,你不需要在你的指令碼中建立 [Messages] 段,按預設,所有的訊息在 Inno Setup 的 Default.isl 檔案 (或在 [Languages] 段指定的條目) 中已經包含。
但是,一些特殊的訊息可以用建立在指令碼檔案 [Messages] 段的內容覆蓋。要覆蓋訊息,首先你需要知道你想更的訊息 ID。這可以通過搜尋 Default.isl 很容易地找到。例如,你想改變嚮導頁“&Next >”按鈕為“前進(&F) >”,此訊息的 ID 是“ButtonNext”,所以你只要在 [Messages] 段寫入下面的內容:

[Messages]
ButtonNext=前進(&F) >


[LangOptions]

[LangOptions] 段用於定義特殊語言設定,象字型一樣,被安裝程式和解除安裝程式使用。通常,你不需要在你的指令碼中建立 [LangOptions] 按預設,所有的特殊語言設定在 Inno Setup 的 Default.isl 檔案 (或在 [Languages] 段指定的條目) 中已經包含。下面是 [LangOptions] 段的一個例子。(下面列出的設定是預設值。)

[LangOptions]
LanguageName=English
LanguageID=$0409
DialogFontName=
DialogFontSize=8
WelcomeFontName=Verdana
WelcomeFontSize=12
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8


[Registry]

這個可選段用來定義一些你想用安裝程式在使用者系統中建立、修改或刪除的登錄檔鍵/值。按預設,用安裝程式建立的登錄檔鍵和值在解除安裝時不刪除。如果你想讓解除安裝程式刪除鍵或值,你必須包含下面 uninsdelete* 標記中的一個。下面是 [Registry] 段的一個示例。

[Registry]
Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\My Company\My Program"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"


[Run]

[Run] 段是可選的,用來指定程式完成安裝後、在安裝程式顯示最終對話方塊之前要執行的程式數,[UninstallRun] 段也可樣是可選的,用來指定在解除安裝第一步要執行的程式數。除在下面有註釋的外,兩個段用相同的語法。
程式按它們在指令碼中的出現順序執行。當處理 [Run]/[UninstallRun] 段條目時,安裝程式/解除安裝程式將在處理下一個任務之前等待,直到程式終止。除非使用了 nowait,shellexec 或 waituntilidle 標記。
注意,按預設,如果 [Run] 段佇列檔案中的一個正在執行的程式要在下一次重新啟動後替換 (通過呼叫 MoveFileEx 或通過修改 wininit.ini),安裝程式將進行偵測,並在安裝結束後提示使用者重新啟動電腦。如果你不想這麼做,設定 RestartIfNeededByRun 指示為 no。下面是 [Run] 段的一個示例。

[Run]
Filename: "{app}\INIT.EXE"; Parameters: "/x"
Filename: "{app}\README.TXT"; Description: "檢視自述檔案"; Flags: postinstall shellexec skipifsilent
Filename: "{app}\MYPROG.EXE"; Description: "執行應用程式"; Flags: postinstall nowait skipifsilent unchecked


[UninstallDelete]

這個可選段定義你想讓解除安裝程式刪除除用 [Files] 或 [Dirs] 條目安裝/建立外的其它檔案或目錄,或由你應用程式建立的一些公共使用的 .INI 檔案。解除安裝程式在解除安裝時最後一步處理這些條目。 這裡是 [UninstallDelete] 段的一個示例:

[UninstallDelete]
Type: files; Name: "{win}\MYPROG.INI"


InnoSetup指令碼中可以潛入大量常量,這些預定義的字元被包括在{ }中。例如:{app}為使用者在安裝嚮導中的選擇目標位置頁中選定的應用程式目錄,如果你在專案中指定了 {app}\MYEXE.EXE,使用者選擇了“C:\MYDIR”作為應用程式目錄,安裝程式將該檔案安裝到“C:\MYDIR\MYEXE.EXE”。

{win}
系統的 Windows 目錄。
例如: 如果你在條目中使用了 {win}\MYPROG.INI,且系統的 Windows 目錄是“C:\WINDOWS”安裝程式將它傳送到“C:\WINDOWS\MYPROG.INI”。

{sys}
系統的 Windows System 目錄 (在 NT 平臺上是 System32)。
例如: 如果你在條目中使用了 {sys}\CTL3D32.DLL,且系統的 Windows System 目錄是“C:\WINDOWS\SYSTEM”,安裝程式將它傳送到“C:\WINDOWS\SYSTEM\CTL3D32.DLL”。
{src}

安裝程式檔案所在目錄。
例如: 你在條目中使用了 {src}\MYPROG.EXE,且使用者正在從“S:\”進行安裝,安裝程式將它傳送到“S:\MYPROG.EXE”。

{sd}
Windows 系統所在的驅動器。一般來說是“C:”。在 Windows NT 平臺,這個目錄常量等同於 SystemDrive 環境變數。
{pf}
程式檔案位置。系統的 Program Files 目錄的路徑,一般來說是“C:\Program Files”。
{cf}
公共檔案目錄。系統的 Common Files 目錄路徑,一般來說是“C:\Program Files\Common Files”。
{tmp}
臨時目錄。這不是使用者的 TEMP 環境變數值。它是在安裝程式啟動後在使用者臨時目錄中建立的子目錄 (象名為“C:\WINDOWS\TEMP\IS-xxxxx.tmp”)。目錄中的所有檔案和子目錄在安裝程式退出時刪除。這主要用於提取在 [Run] 段執行、但安裝後不再需要的檔案。

{fonts}
字型目錄。通常是在 Windows 下面的名字“FONTS”的目錄。
{dao}
DAO 目錄,等同於 {cf}\Microsoft Shared\DAO。

{group}
開始選單資料夾路徑,由使用者在安裝程式的選擇開始選單資料夾嚮導頁中選定。在 Windows NT/2000/XP,這個資料夾總是建立在所有使用者配置檔案下,除非非使用者安裝程式的使用者沒有管理員許可權,這種情況下它將建立在使用者配置檔案下。

{localappdata}
本地應用程式資料資料夾。

{sendto}
當前使用者的 Send To 資料夾路徑。(這裡不是指公共 Send To 資料夾。)

{userappdata} 和 {commonappdata}
應用程式資料資料夾路徑。

{userdesktop} 和 {commondesktop} *
桌面資料夾路徑。

{userdocs} 和 {commondocs}
我的文件 (My Documents) 資料夾路徑 (在 NT 4.0,私人資料夾)。

{userfavorites} 和 {commonfavorites} *
收藏夾資料夾路徑。這些常量設定必須 至少“4.1, 4” MinVersion 設定。只在 Windows 2000 和更高版本支援 {commonfavorites};如果在先前的 Windows 版本中使用,它將翻譯為等同於 {userfavorites} 目錄。

{userprograms} 和 {commonprograms} *
開始選單中程式資料夾路徑。

{userstartmenu} 和 {commonstartmenu} *
開始選單頂層路徑。

{userstartup} 和 {commonstartup} *
開始選單啟動資料夾路徑。

{usertemplates} 和 {commontemplates} *
臨時資料夾路徑。僅在 Windows 2000 和更高版本支援 {commontemplates},如果使用的是先前的 Windows 版本,它將被翻譯為等同於 {usertemplates} 目錄

{ini:Filename,Section,Key|DefaultValue}
從 .INI 檔案插入一個值

示例: {ini:{win}\MyProg.ini,Settings,Path|{pf}\My Program}

{reg:HKxx\SubkeyName,ValueName|DefaultValue}
插入一個登錄檔值

示例: {reg:HKLM\Software\My Program,Path|{pf}\My Program

{srcexe}
安裝程式檔案的完整路徑名,例如“C:\SETUP.EXE”。
{sysuserinfoname}
{sysuserinfoorg}
Windows 已許可的名字和組織,這個資訊從登錄檔中讀取。
{uninstallexe}
由安裝程式提取的解除安裝程式的完整路徑名,例如“C:\Program Files\My Program\unins000.exe”。這個常量一般用於在 [Icons] 段條目建立一個解除安裝圖示。它只在 Uninstallable 設為 yes (預設設定) 時有效。
{userinfoname}
{userinfoorg}
{userinfoserial}
使用者在使用者資訊嚮導頁 (可以通過 UserInfoPage 指示來啟用) 中分別輸入的名字,組織和序列號。一般來說,這些常量用於在 [Registry] 或 [INI] 條目中儲存它們以後要使用的值。
{username}
正在執行安裝程式的使用者的名字 (也可以用 GetUserName 函式返回)。

InnoSetup有三個可選的被所有段條目支援的引數,它們是:

Languages:支援語言,即使用者選擇安裝語言的儲存值!例如:Languages: en nl

MinVersion:指定條目要進行處理的最小 Windows 版本 Windows NT 版本。例如:MinVersion: 4.0,4.0

OnlyBelowVersion:制定不處理的最小版本號,用法通上!

廢話也說了這麼多,提供給大家兩個小例子,僅供參考!

(1.大學時候給兄弟做的畢業課程設計中的例子)

[Setup]
;安裝介面左上角程式名
AppName=車次查詢系統
AppVerName=車次查詢系統 版本 1.1
;預設安裝目錄、預設安裝目錄名
DefaultDirName={pf}\車次查詢系統
DefaultGroupName=車次查詢系統
;選擇是否建立圖示
AllowNoIcons=1
;是否進行選擇安裝模式
AlwaysShowComponentsList=1
;設定選擇目錄項
AlwaysShowDirOnReadyPage=1
;設定開始選單資料夾名
AlwaysShowGroupOnReadyPage=1
AppCopyright=Copyright 2007 GeniusCompany, Inc.
AppPublisher=GeniusCompany, Inc.
AppPublisherURL=http://blog.sina.com.cn/vistablog
AppVersion=1.1
;可重新修復軟體
AppModifyPath="{app}\Setup.exe" /modify=1
;資源管理器更改環境變數
;ChangesEnvironment=1
;提示輸入使用者資訊
UserInfoPage=1
;預設序列號
DefaultUserInfoSerial=yangxi
;密碼
Password=genius
;許可文件
LicenseFile=license.txt
;選擇目標目錄頁前顯示閱讀文件
InfoBeforeFile=infobefore.txt
;安裝完成後顯示閱讀文件
;InfoAfterFile=infoafter.txt
;顯示啟動漸變背景
WindowVisible=1
;安裝程式使用“3D”選擇框
FlatComponentsList=0
;安裝程式指定新圖示
SetupIconFile=alawar.ico
;解除安裝圖示
UninstallDisplayIcon={app}\uninstall.ico
[Types]
Name: "full"; Description: "完全安裝"
Name: "compact"; Description: "簡潔安裝"
Name: "custom"; Description: "自定義安裝"; Flags: iscustom
[Files]
Source: "db1.mdb"; DestDir: "{app}"

Source: "*.ico"; DestDir: "{app}"
Source: "Workspace.jcw"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
Source: "Design\*.*"; DestDir:"{app}\Design\"
Source: "Design\classes\*.*"; DestDir:"{app}\Design\classes\"
Source: "Design\classes\server\*.*"; DestDir:"{app}\Design\classes\server\"
Source: "Design\classes\cliant\*.*"; DestDir:"{app}\Design\classes\cliant\"
Source: "Design\classes\common\*.*"; DestDir:"{app}\Design\classes\common\"
Source: "Design\classes\myprojects\*.*"; DestDir:"{app}\Design\classes\myprojects\"
Source: "Design\classes\myprojects\design\*.*"; DestDir:"{app}\Design\classes\myprojects\design\"
Source: "Design\common\*.*"; DestDir:"{app}\Design\common\"
[Icons]
;Name: "{userdesktop}\車次查詢系統伺服器端"; Filename: "{app}\Design\classes\伺服器.bat";IconFilename: "{app}\TrainCheck.ico"
Name: "{group}\車次查詢系統伺服器端"; Filename: "{app}\Design\classes\伺服器.bat";IconFilename: "{app}\TrainCheck.ico"
Name: "{group}\車次查詢系統客戶端"; Filename: "{app}\Design\classes\客戶.bat";IconFilename: "{app}\MSN.ICO"
Name: "{group}\解除安裝車次查詢系統"; Filename: "{uninstallexe}";IconFilename: "{app}\uninstall.ico"
[INI]
FileName: "{app}\MyIni.ini"; Section: "InstallSettings";Flags: uninsdeletesection
FileName: "{app}\MyIni.ini"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"
[UninstallDelete]
Type: files; Name: "{app}\MyIni.ini"
;[Registry]
;Root: HKLM; Subkey: "Software\LFQ Company"; Flags: uninsdeletekeyifempty
;Root: HKLM; Subkey: "Software\LFQ Company\車次查詢系統"; Flags: uninsdeletekey
;Root: HKLM; Subkey: "Software\LFQ Company\車次查詢系統\Settings"; ValueType: string; ValueName: "Path"; ValueData: "{app}" 

(2.齊魯證券的安裝檔案)

[Setup]
AppName=齊魯證券行情交易系統
AppVerName=齊魯證券行情交易系統
AppCopyright=版權所有 1997-2006 恆生資訊有限公司
DefaultDirName={pf}\qlzq\
DefaultGroupName=齊魯投資通
MinVersion=4,4
;CompressLevel=9
;DiskSpanning=Yes
;iskSize=1300000
DisableStartupPrompt=yes
DisableProgramGroupPage=yes
DisableFinishedPage=Yes
AppPublisher=杭州恆生資訊科技有限公司
AppPublisherURL=http://www.hsinfo.com.cn

[Files]
;行情部分的檔案
Source: "*.dll"; DestDir: "{app}\"; Flags :ignoreversion
Source: "*.exe"; DestDir: "{app}\"; Flags :ignoreversion
Source: "*.ini"; DestDir: "{app}\"; Flags :ignoreversion
;Source: "HQControl.ocx"; DestDir: "{app}\"; Flags :ignoreversion
Source: "Setting\*.*"; DestDir: "{app}\Setting\"; Flags :ignoreversion
Source: "InitDat\*.*"; DestDir: "{app}\InitDat\"; Flags :ignoreversion
Source: "UserDefineIndex\*.*"; DestDir: "{app}\UserDefineIndex\"; Flags :ignoreversion
Source: "SelfTemp\*.*"; DestDir: "{app}\SelfTemp\"; Flags :ignoreversion
Source: "SelfDir\*.*"; DestDir: "{app}\SelfDir\"; Flags :ignoreversion
Source: "Block\*.*"; DestDir: "{app}\Block\"; Flags :ignoreversion
Source: "hqjy.iss"; DestDir: "{app}\"; Flags :ignoreversion
Source: "cacert.pem"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs

[Icons]
Name: "{group}\齊魯證券投資通行情"; Filename: "{app}\HappyStar.exe"; WorkingDir:"{app}"
Name: "{group}\齊魯證券交易"; Filename: "{app}\JYClient.exe";WorkingDir:"{app}"
Name: "{group}\解除安裝行情交易"; Filename: "{app}\unins000.exe"; WorkingDir:"{app}"
Name: "{userdesktop}\齊魯證券投資通行情"; Filename: "{app}\HappyStar.exe"; WorkingDir:"{app}"
Name: "{userdesktop}\齊魯證券交易"; Filename: "{app}\jyclient.exe"; WorkingDir:"{app}"

[UninstallDelete]
Type: filesandordirs; Name: "{app}\cell.ini"
Type: filesandordirs; Name: "{app}\cell"
Type: filesandordirs; Name: "{app}\logs"
Type: filesandordirs; Name: "{app}\*.dat"
Type: filesandordirs; Name: "{app}\*.*"

[Run]
Filename: "{app}\HappyStar.exe";Flags: nowait ;