2008年8月5日 星期二

How to use Inno Setup

[Sections]

[Common Parameters]

1. 可以被用在所有section中的項目的參數
Languages
告訴Inno這個項目屬於哪一個語言版本, 如果User在安裝時選擇該語言, 那這一行就會被處裡, 如果該項目沒有Language參數, 表示它永遠會被處裡

Example:
Languages: en nl

也可以呼叫boolean expression

MinVersion
not used so far

OnlyBelowVersion
not used so far

Check
指定一個function, 決定這個項目要不要被執行, 所有的check function都必須是回傳一個boolean值

Example:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheck
Source: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck(ExpandConstant('{app}\A'))
Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: DirExists(ExpandConstant('{app}\B'))

.
.
.

[Code]
var
MyProgChecked: Boolean;
MyProgCheckResult: Boolean;

function MyProgCheck(): Boolean;
begin
if not MyProgChecked then begin
MyProgCheckResult := MsgBox('Do you want to install MyProg.exe to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes;
MyProgChecked := True;
end;
Result := MyProgCheckResult;
end;

function MyDirCheck(DirName: String): Boolean;
begin
Result := DirExists(DirName);
end;


2. 除了[Types],[Components],[Tasks]不能用, 其他section都可以用的參數
BeforeInstall
指定function名稱, 該項目在被install之前會呼叫此function (也可帶參數)

AfterInstall
指定function名稱, 該項目在被install之後會呼叫此function (也可帶參數)

範例:
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall
Source: "A\MYFILE.TXT"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall2('{app}\A\MYFILE.TXT')
Source: "B\MYFILE.TXT"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall2('{app}\B\MYFILE.TXT')
Source: "MYPROG.HLP"; DestDir: "{app}"; BeforeInstall: Log('Before MYPROG.HLP Install')

- 所有BeforeInstall和AfterInstall functions都不可以return任何值
- 如果該項目早就被決定不會被處裡,則不會呼叫BeforeInstall和AfterInstall的functions
- 參考CodeExample1.iss

[Setup]
描述:
設定安裝檔的Global settings

範例:
[Setup]
AppName=My Program
AppVerName=My Program version 1.4
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

參數:
AllowNoIcons: 如果設定為yes, 則會在安裝過程中的Select Start Menu Folder wizard page出現"Don't create a Start Menu folder"選項
AppMutex: 防止User在程式運行中安裝 or 反安裝該程式
UninstallDisplayIcon: 設定Uninstaller程式的Icon (會出現在控制台的新增/移除程式選項中)
WizardImageFile: 設定Setup page的顯示圖檔
OutputDir: 指定這個Script編譯後的output檔放置的目錄, 預設會在此Script的相同目錄下的"Output"資料夾
ChangesAssociations: 若是yes, 則安裝完會提醒explorer更新檔案關聯的Icon,否則要等使用者下次重新啟動電腦時才會更新

[Files]
描述:
定義所有將被安裝到系統的檔案

參數:
Source (Required): 來源檔名
DestDir (Required): 目的地目錄
DestName: 目標檔名
Excludes: not used so far
CopyMode: not used so far
Attribs: not used so far
Permissions: not used so far
FontInstall: not used so far
Flags: not used so far

[Registry]
描述:
定義你要在Setup期間在登錄表上建立/修改/刪除的registry key, Inno Setup預設"不會"在uninstall期間刪除這些鍵值, 如果你想要在移除程式時也一併刪除該鍵值的話, 必須加入uninsdelete* flag.

範例:
[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 (Required): Root key, 必須是下列選項之一
|-- HKCR (HKEY_CLASSES_ROOT)
|-- HKCU (HKEY_CURRENT_USER)
|-- HKLM (HKEY_LOCAL_MACHINE)
|-- HKU (HKEY_USERS)
|-- HKCC (HKEY_CURRENT_CONFIG)

Subkey (Required):Subkey名稱, 包含一個字串常數
Example:
Subkey: "Software\My Company\My Program"

- ValueType: 鍵值的型態
|-- none
|-- string
|-- expandsz
|-- multisz
|-- dword
|-- binary
Example:
ValueType: string

- ValueName: 鍵值的名稱, 如果沒有指定的話, 預設為"Default"
Example:
ValueName: "Version"

- ValueData: 鍵值的內容
Example:
ValueData: "1.0"

- Permissions: not used so far

- Flags: 設定額外選項, 若有一個以上選項的話則用空格隔開
|-- createvalueifdoesntexist: 若設定此選項, 安裝時只有在相同名稱的鍵值不存在時才會建立; 此選項在data type=none或是已設定deletevalue旗標的情況下無作用
|-- deletekey: 若設定此選項, 安裝時一開始會嘗試刪除整個登陸鍵(如果存在的話),包括它的所有value以及subkeys, 如果ValueType != none,它會建立一個全新的key/value
|-- deletevalue: 若設定此選項, 安裝時會先嘗試刪除此value值(如果存在的話), 如果ValueType != none, 會建立一個全新的value
|-- dontcreatekey: 安裝時"不要"建立這個鍵值(通常跟uninsdeletekey一起用, 指明在移除時要刪除該鍵值, 但安裝時不要建立該鍵值)
|-- noerror: 設定在建立registry失敗時不要顯示任何錯誤訊息
|-- preservestringtype: not used so far
|-- uninsclearvalue: 在移除程式時, 把此鍵的value設成NULL, 不可以跟uninsdeletekey混用
|-- uninsdeletekey: 移除程式時, 刪除整個Key, 包括它的所有value跟subkeys
|-- uninsdeletekeyifempty: 移除程式時, 如果此鍵沒有value或是subkey, 則刪除此鍵
|-- uninsdeletevalue: 移除程式時刪除此value

[Run]/[UninstallRun]
描述:
指定若干個程式,會在安裝/移除完成後,顯示final dialog之前, 呼叫這些程式

範例:
[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 (Required): 執行檔名
- Description:
- Parameters: 傳給執行檔的參數
- WorkingDir: 設定該執行檔的工作目錄
Example:
WorkingDir: "{app}"
- StatusMsg: only for [Run], 設定當wizard在執行該執行檔時要顯示的字串
Example:
StatusMsg: "Installing BDE..."

- RunOnceId:
- Flags:
|-- hidewizard:
|-- nowait:
|-- postinstall:
|-- runhidden: 在隱藏視窗下執行該執行檔, 不可以用在需要user輸入資料的執行檔
|-- runmaximized: 在最大化視窗下執行該執行檔
|-- runminimized: 在最小化視窗下執行該執行檔
|-- shellexec
|-- skipifdoesntexist: 設定如果找不到檔案就跳過, 不顯示錯誤訊息 (使用此選項時, 檔名必須是絕對路徑)
|-- skipifnotsilent
|-- skipifsilent
|-- unchecked
|-- waituntilidle
|-- waituntilterminated

沒有留言: