NSIS - 强制用户选择其他目录

Rex*_*Rex 4 windows nsis

到目前为止,我已经找到了如何通过读取注册表项来检测以前的软件安装,并测试该目录是否存在.(两者都在NSIS帮助文件中有详细记录).现在我想强制用户指定一个不同的目录,如果以前安装了该应用程序.(不想自己强制卸载,因为以前的版本只删除包括已保存数据在内的所有内容).

据我所知,MUI2.nsh中有预定义的模板,用于许可证,安装文件夹,进度指示器等.如何在安装程序流程的此阶段添加验证?

更新 - 尝试了保罗的解决方案,但它不起作用.在脚本的顶部,我已经声明了

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE validateDirectory
!insertmacro MUI_PAGE_DIRECTORY
Run Code Online (Sandbox Code Playgroud)

引用此功能:

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
Run Code Online (Sandbox Code Playgroud)

此功能显示消息,但不会中止.此外,如果我在目录选择页面中单击"返回"并再次单击向前,则只需继续安装.

Pau*_*unt 5

您需要像这样为目录页面指定"离开"功能

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory
!insertmacro MUI_PAGE_DIRECTORY
Run Code Online (Sandbox Code Playgroud)

这将调用单击"下一步"按钮时指定的函数.

然后使用验证所选目录所需的逻辑创建LeaveDirectory函数,如果确定目录无效,只需在函数中调用Abort,安装程序将不会继续执行下一步.

该文档位于页面的"自定义函数"部分下,但由于您必须展开"页面自定义函数"标题,遗憾的是并不明显.