事件函數(2) function CheckPassword(Password: String): Boolean; 如果安裝程式在Pascal 指令碼中發現該函數,它自動顯示密碼頁並調用CheckPassword 檢查密碼。返回True 表示接受密碼,返回False 拒絕。測試代碼如下:
function CheckPassword(Password: String): Boolean; begin if Password='castor' then result:=true; end; |
在安裝過程中將會出現詢問安裝密碼的頁面,如果輸入錯誤將會出現下面的對話方塊: 為了避免在 [Code] 段內部貯存真實的密碼,最好使用其他的資訊進行比較,例如使用GetMD5OfString(Password)計算實際密碼的MD5值保護實際密碼。 function NeedRestart(): Boolean; 如果返回True,安裝程式在安裝結束時提示使用者重啟系統,False則不提示。測試代碼如下:
function NeedRestart(): Boolean; begin result:=True; end; |
在安裝完成之後的finish頁面,將會出現如下的選項: function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; 如果指令碼中存在該函數,則在Ready to Install頁面變為活動頁的時候自動調用該函數,該函數返回一段文本,該文本顯示於Ready to Install頁面中的設定備忘中,並且該文本將用NewLine參數分割為一個單獨的多行字串,參數Space指代空格,測試是六個,其它參數將包含安裝程式用於設定段的字元 (可能是空的)。例如MemoDirInfo 參數包含選擇目錄段的字串。測試代碼如下:
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoComponentsInfo, MemoTasksInfo: String): String; var res: String; begin res:='UpdateReadyMemo Function is here'+NewLine+'This is the Second Line'; res:=res+Space+'And with Six Spaces'; res:=res+NewLine+'MemoUserInfoInfo'+MemoUserInfoInfo; res:=res+NewLine+'MemoDirInfo'+MemoDirInfo; res:=res+NewLine+'MemoTypeInfo'+MemoTypeInfo; res:=res+NewLine+'MemoComponentsInfo'+MemoComponentsInfo; res:=res+NewLine+'MemoComponentsInfo'+MemoComponentsInfo; res:=res+NewLine+'MemoTasksInfo'+MemoTasksInfo; Result:=res; end; |
運行後在安裝前會出現確認頁面: 標記黃色文字下面是各個參數的內容。 procedure RegisterPreviousData(PreviousDataKey: Integer); 本過程實現在自訂嚮導頁中貯存使用者輸入的設定,在指令碼中放入本函數,並調用SetPreviousData(PreviousDataKey, ...) 替換它,每次設定一個。 function CheckSerial(Serial: String): Boolean; 該函數將在使用者資訊嚮導頁中自動出現一個序號對象 (前提是[Setup] 段中使用UserInfoPage=yes)。返回True 表示接受序號,返回False 拒絕。注意:當使用序號時,該軟體並沒有被加密,而且Inno Setup 原始碼是免費擷取的,有經驗的人從安裝程式中刪除序號保護並不是很困難的事。本函數只是方便使用者在你的應用程式中仔細檢查輸入的序號 (貯存在{userinfoserial} 常量)。測試代碼如下:
function CheckSerial(Serial: String): Boolean; begin if Serial='ABCDEF-1234567890' then Result:=True; end; |
在安裝過程中將會出現一個頁面,如下: 如果Serial Number不正確,Next按鈕將會無效,只有正確的序號才能使得Next按鈕有效,再次說明:不要指望使用這種方法保護你的軟體。 function GetCustomSetupExitCode: Integer; 返回一個非零值,命令安裝程式返回一個自訂結束代碼,本函數只在安裝程式運行完成並且結束代碼已是零時才調用。常見的結束代碼如下:
代碼 |
說明 |
0 |
安裝程式成功完成 |
1 |
安裝程式初始化失敗 |
2 |
使用者在實際安裝前點擊取消,或者在開始的“這將安裝……”時選擇否 |
3 |
當準備到下一個安裝階段的時候發生致命錯誤,只有在比較極端的情況下發生這種錯誤,例如記憶體耗盡。 |
4 |
實際安裝過程中發生致命錯誤 |
5 |
使用者在實際安裝過程中點擊取消或者在“終止-重試-忽略”對話方塊中點擊了終止 |
6 |
安裝程式被調試器強制終止 |
7 |
準備安裝階段發現安裝無法進行 |
8 |
準備安裝階段發現安裝無法進行,並且系統需要重啟來解決問題 |
例如在用Inno Setup調試編譯後的安裝檔案時,按下Ctrl+F2後,下面的調試輸出將會提示如下: 結束代碼為6,可見安裝程式被調試器強制終止。 function PrepareToInstall(var NeedsRestart: Boolean): String; 在與安裝階段返回一個非Null 字元串命令安裝程式停止,該字串將會作為錯誤訊息,設定NeedsRestart為True將要求使用者重啟系統,該函數只在安裝程式發現不能繼續下去的時候才被調用。 |