原文地址:http://www.dayanzai.me/inno-setup-tut.html
[Registry] 段
這個可選段用來定義一些你想用安裝程序在用戶系統中創建、修改或刪除的注冊表鍵/值。
按默認,用安裝程序創建的注冊表鍵和值在卸載時不刪除。如果你想讓卸載程序刪除鍵或值,你必須包含下面 uninsdelete* 標記中的一個。
下面是 [Registry] 段的一個示例。
[Registry]
Root: HKCU; Subkey: “Software\My Company”; Flags: uninsdeletekeyifempty
Root: HKCU; Subkey: “Software\My Company\My Program”; Flags: uninsdeletekey
Root: HKLM; Subkey: “Software\My Company”; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: “Software\My Company\My Program”; Flags: uninsdeletekey
Root: HKLM; Subkey: “Software\My Company\My Program”; ValueType: string; ValueName: “InstallPath”; ValueData: “{app}”
下列是所支持的參數列表:
Root (必需)
描述:
根鍵。必須是下列中的一個:
HKCR (HKEY_CLASSES_ROOT)
HKCU (HKEY_CURRENT_USER)
HKLM (HKEY_LOCAL_MACHINE)
HKU (HKEY_USERS)
HKCC (HKEY_CURRENT_CONFIG)
示例:
Root: HKCU
Subkey (必需)
描述:
子鍵名,可以包含常量。
示例:
Subkey: “Software\My Company\My Program”
ValueType
描述:
值的數據類型。必須是下面中的一個:
none
string
expandsz
multisz
dword
binary
如果指定了 none (默認設置),安裝程序將創建一個沒有鍵值的鍵,在這種情況下,ValueName 和 ValueData 參數將被忽略。
如果指定了 string,安裝程序將創建一個字符串 (REG_SZ) 值。
如果指定了 expandsz,安裝程序將創建一個擴展字符串 (REG_EXPAND_SZ) 值。這種數據類型起初是用於 Windows NT/2000/XP 上,但是也支持 Windows 95/98/me。
如果指定了 multisz,安裝程序將創建一個多行文本 (REG_MULTI_SZ) 值。
如果指定了 dword,安裝程序將創建一個整數 (REG_DWORD) 值。
如果指定了 binary,安裝程序將創建一個二進制 (REG_BINARY) 值。
示例:
ValueType: string
ValueName
描述:
要創建的值名,可以包含常量。如果是空白的,將寫入到“默認”值。如果 ValueType 參數設置為 none,這個參數被忽略。
示例:
ValueName: “Version”
ValueData
描述:
值 的數據。如果 ValueType 參數是 string,expandsz 或 ultisz,這是這一個可以包含常量的字符串。如果數據類型是 dword,這可以是一個十進制整數 (例如“123”),一個十六進制整數 (例如“$7B”) 或解析為整數的常量。如果數據類型是 binary,這可以是下列形式的十六進制字節序列: “00 ff 12 34”。如果數據類型是 none,將被忽略。
在 string,expandsz 或 multisz 類型值中,你可以在這個參數中使用一個特殊的常量調用 {olddata}。{olddata} 用先前的注冊表值數據替換。如果你想添加一個字串到現有的值中,{olddata} 常量非常有用。例如,{olddata};{app}。如果該值不存在或現有的值不是一個字符串類型,{olddata} 常量將被刪除。如果創建的值是一個 multisz 類型,但現有的值不是多行字符類型(例如,它是 REG_SZ 或 REG_EXPAND_SZ),{olddata} 常量也將被刪除。反這亦然。
在 multisz 類型值中,你可以在參數中使用一個特殊常量調用 {break} 以插入換行符。
示例:
ValueData: “1.0”
Permissions
描述:
指定登錄注冊表鍵 ACL (訪問控制列表) 的附加權限。如果你不熟悉 ACL 或你不知道為什么要列改,不推薦你使用這個參數,因為誤用會導致重大的系統安全問題。
這個參數在用戶必須運行 Windows 2000 或更高版本 (NT 4.0 由於 API 的問題不支持) 以及當前用戶必須有更改注冊表的權限時才有效。這些條件不滿足時,不會顯示錯誤消息,權限也不會被設置。
這個參數應該只使用於你的應用程序特有的注冊表鍵中。不要更改頂級鍵象 HKEY_LOCAL_MACHINE\SOFTWARE 的 ACL,否則你自己打開了用戶系統的安全漏洞。
指定的權限不考慮注冊表鍵在安裝前是否存在。如果 ValueType 是 none 和使用了 deletekey 或 deletevalue 標記時,不要設置這個權限。
這個參數可以包含象下列格式一樣一個或多個空格分隔的值:
<用戶或組標識>-<訪問類型>
下面是 [Registry] 段支持的訪問類型:
full
同意“完全控制”許可,與修改相同 (看下面),但又加上允許指定的用戶/用戶組獲取注冊表鍵所有權,並改變它的許可。通常保守的使用 modify 就足夠了。
modify
同意“修改”許可,允許指定的用戶/用戶組讀取、修改和刪除注冊表值或子鍵。
read
同意“讀取和執行”許可,允許指定的用戶/用戶組讀取注冊表值或子鍵。
示例:
Permissions: authusers-modify
Flags
描述:
這個參數是額外選項設置。多個選項可以使用空格隔開。支持下面的選項:
createvalueifdoesntexist
當指定了這個標記,安裝程序只在如果沒有相同名字的值存在時創建值。如果值類型是 none,或如果你指定了 deletevalue 標記,這個標記無效。
deletekey
當指定了這個標記,安裝程序在如果條目存在的情況下,先將嘗試刪除它,包括其中的所有值和子鍵。如果 ValueType 不是 none,那么它將創建一個新的鍵和值。
要防止意外,如果子鍵是空白的或只包含反斜框符號,安裝時這個標記被忽略。
deletevalue
當指定了這個標記,安裝程序在如果值存在的情況下,先將嘗試刪除值,如果 ValueType 是 none,那么在鍵不存在的情況下,它將創建鍵以及新值。
dontcreatekey
當指定了這個標記,如果鍵已經在用戶系統中不存在,安裝程序將不嘗試創建鍵或值。如果鍵不存在,不顯示錯誤消息。
一般來說,這個鍵與 uninsdeletekey 標記組合使用,在卸載時刪除鍵,但安裝時不創建鍵。
noerror
如果安裝程序因任何原因創建鍵或值失敗,不顯示錯誤消息。
preservestringtype
這 只在當 ValueType 參數是 string 或 expandsz 時適用。當指定這個標記,並且值不存在或現有的值不是 string 類型 (REG_SZ 或 REG_EXPAND_SZ),它將用 ValueType 指定的類型創建。如果值存在,並且是 string 類型,它將用先存在值的相同值類型替換。
uninsclearvalue
當卸載程序時,設置值數據為空字符 (類型 REG_SZ)。這個標記不能與 uninsdeletekey 標記組合使用。
uninsdeletekey
當卸載程序時,刪除整個鍵,包含其中的所有值和子鍵。這對於 Windows 自身使用的鍵明顯不是一個好方法。你只能用於你的應用程序特有的鍵中。
為防止意外,安裝期間如果子鍵空白或只包含反斜框符號,這個標記被忽略。
uninsdeletekeyifempty
當程序卸載時,如果這個鍵的內部沒有值或子鍵,則刪除這個鍵。這個標記可以與 uninsdeletevalue 組合使用。
為防止意外,安裝期間如果子鍵空白或只包含反斜框符號,這個標記被忽略。
uninsdeletevalue
當程序卸載時刪除該值。這個標記不能與 uninsdeletekeyifempty 組合使用。
注意: 在早於 1.1 的 Inno Setup 版本中,你可以使用這個標記連同數據類型 none,那么它的功能與“如果空則刪除鍵”標記一樣。這個方法已經不支持了。你必須使用 uninsdeletekeyifempty 標記實現。
示例:
Flags: uninsdeletevalue
[Run] & [UninstallRun] 段
[Run] 段是可選的,用來指定程序完成安裝后、在安裝程序顯示最終對話框之前要執行的程序數,[UninstallRun] 段也可樣是可選的,用來指定在卸載第一步要執行的程序數。除在下面有注釋的外,兩個段用相同的語法。
程序按它們在腳本中的出現順序執行。按默認,當處理 [Run]/[UninstallRun] 段條目時,安裝程序/卸載程序將在處理下一個任務之前等待,直到程序終止。除非使用了 nowait,shellexec 或 waituntilidle 標記。
注 意,按默認,如果 [Run] 段隊列文件中的一個正在執行的程序要在下一次重新啟動后替換 (通過調用 MoveFileEx 或通過修改 wininit.ini),安裝程序將進行偵測,並在安裝結束后提示用戶重新啟動電腦。如果你不想這么做,設置 RestartIfNeededByRun 指示為 no。