2011-12-09 10 views
4

これまでのところ、レジストリキーを読み、そのディレクトリが存在するかどうかをテストすることでソフトウェアの以前のインストールを検出する方法を知りました。 (どちらもNSISのヘルプファイルによく書かれています)。今は、アプリケーションが以前にインストールされている場合、ユーザーに別のディレクトリを指定させる必要があります。 (以前のバージョンでは、保存されたデータを含むすべてが削除されるため、自分でアンインストールする必要はありません)。NSIS - ユーザーに別のディレクトリを選択させる

MUI2.nshには、ライセンス、インストールフォルダ、進行状況インジケータなどの定義済みのテンプレートがあります。 インストーラフローのこの段階でバリデーションを追加するにはどうすればよいですか?

更新 - Tried Paulのソリューションですが、動作しません。スクリプトの先頭に が、私はこの機能を参照するために

!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 

のようなディレクトリページの「脱退」機能を指定する必要があり、これは、[次へ]ボタンをクリックしたときに指定した関数を呼び出します。

次に、選択したディレクトリを検証するために必要なロジックを使用してLeaveDirectory関数を作成し、ディレクトリが無効であると判断された場合は、関数でAbortを呼び出すだけで、インストーラは次のステップに移動しません。

ドキュメントは "カスタム関数"セクションのthisページにありますが、 "ページカスタム関数"の見出しを展開する必要があるため、残念なことに明らかではありません。

+0

ありがとう。だから私はそれは、ユーザーが有効なディレクトリを選択するまで、ディレクトリの画面上に残りますか? – Rex

+0

正しい。ディレクトリが無効なときに関数内でAbortを呼び出すと、次のページに移動しません。 –

+0

ここで説明したようにこのAbortは機能しません。インストーラは悪い状態になります。すべてのユーザ入力は無視され、インストーラの下にあるものに渡され、タスクマネージャのバックグラウンドプロセスに降格されますが、Alt-Tabで切り替えられます!非常に奇妙な... – jheriko

関連する問題