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

來源:互聯網
上載者:User

事件函數(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將要求使用者重啟系統,該函數只在安裝程式發現不能繼續下去的時候才被調用。

  

 

轉自:http://www.360doc.com/content/13/0327/14/4221543_274246727.shtml

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.