Innosetup功能很強大,可以通過它提供的Wizard接口來定制界面,但我對PASCAL語言不熟悉,也不清楚通過那種接口可改動的范圍有多大,最后做出來的效果是否好,所以選擇了通過一個DLL來實現我的界面。
首先,腳本中增加如下設置,以禁至所有Inno setup自身顯示的界面:
DisableDirPage=yes
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableStartupPrompt =yes
DisableWelcomePage=yes
DisableReadyPage=yes
但ready to install界面還是會顯示,需要去掉Ready to install界面,方法是重新編譯inno setup,下載代碼后使用 Delphi2009(或更新)編譯unicode版本的inno setup(非unicode的需要更多delphi老版本,編譯會失敗),去掉wizard.pas的第2006到2009行。
將新生成的文件拷到原inno setup的安裝目錄。
//if (PageID = wpReady) and not Visible then begin
// Result := False;
// Exit;
//end;
定制安裝界面的DLL需要注意的幾點:
1,不能在新建的線程中創建界面,否則在任務欄會看到安裝程序有兩個縮略圖。
2,如果要讓一個函數返回后窗口不消失,只需要讓窗口的消息循環函數返回即可,以后還可以重新進入循環。
定制界面DLL的可工作目錄
定制卸載界面時發現,把DLL放到system32目錄下就不能運行,在安裝程序的目錄下能運行。
但程序的安裝目錄可能會被用戶修改,引用DLL中的函數時,不支持code,所以一旦用戶修改程序的安裝路徑,就無法調用到該DLL。
將它安裝到{win}目錄,即可解決這些問題。
猜測:system32下的程序在64位系統上都是64位,我的DLL是32位程序,所以在system32目錄就無法運行,但在其它目錄是可以的。