2011-12-09 30 views
4

到目前爲止,我已經找到了如何通過讀取註冊表項,和測試是否存在目錄,以檢測以前安裝我的軟件。 (兩者在NSIS幫助文件中都有詳細記錄)。現在我想強制用戶指定一個不同的目錄,如果應用程序是以前安裝的。 (不想強迫自己卸載,因爲以前的版本只是刪除所有包括保存的數據)。NSIS - 強制用戶選擇不同的目錄

就我所見,MUI2.nsh中有許可證,安裝文件夾,進度指示器等預定義模板。 如何在安裝程序流程的此階段添加驗證?

更新 - 嘗試保羅的解決方案,但它不工作。 在腳本的頂部,我已經聲明

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE validateDirectory 
!insertmacro MUI_PAGE_DIRECTORY 

引用這個功能:

Function validateDirectory 
ReadRegStr $R0 HKLM "SOFTWARE\Aadhaar Enrolment Client" "Installdir" 
Pop $R0 
StrCmp $R0 $OUTDIR +1 +3 
MessageBox MB_ICONSTOP|MB_OK 'The directory $OUTDIR already exists.Please choose a different directory.' 
Abort 
FunctionEnd 

該功能顯示消息,但不會中止。而且,如果我在目錄選擇頁面點擊「返回」並再次點擊前進,則只需繼續安裝即可。

+0

它已經有一段時間...沒有解決這個?特別是一個不使用MUI的人? – e40

+0

沒有..我早就從使用NSIS轉向使用了。 – Rex

+2

我只是提到,我確實得到它的工作,在NSIS論壇的幫助下。 http://forums.winamp.com/showthread.php?t=380848 – e40

回答

4

你需要指定一個「離開」功能的目錄頁這樣

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory 
!insertmacro MUI_PAGE_DIRECTORY 

,這將調用單擊Next按鈕時指定的功能。

然後使用驗證所選目錄所需的邏輯創建LeaveDirectory函數,並且如果目錄被確定爲無效,則只需在函數中調用Abort並且安裝程序將不會繼續下一步。

的文檔上this頁面中的「自定義功能」部分下,但因爲你必須展開「頁面自定義功能」標題不明顯不幸。

+0

感謝。所以如果我這樣做,它會保持在目錄屏幕上,直到用戶選擇一個有效的目錄? – Rex

+0

正確。只要您撥打中止的功能時,該目錄是無效的,那麼它不會移動到下一個頁面 –

+0

如果我嘗試這裏描述這種中止不起作用,它把安裝在一個糟糕的狀態,所有用戶輸入被忽略,被傳遞給安裝程序下面的任何東西,並且它被降級到任務管理器中的後臺進程...但仍然可以使用Alt-Tab切換到!很奇怪...... – jheriko

相關問題