1. 程式人生 > >Inno Setup入門(十三)——Pascal指令碼(2)

Inno Setup入門(十三)——Pascal指令碼(2)

事件函式(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;

在與安裝階段返回一個非空字串命令安裝程式停止,該字串將會作為錯誤訊息,設定NeedsRestartTrue將要求使用者重啟系統,該函式只在安裝程式發現不能繼續下去的時候才被呼叫。