到目前为止,我已经找到了如何通过读取注册表项来检测以前的软件安装,并测试该目录是否存在。 (两者都在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 :(得分:5)
您需要为此目录页面指定“离开”功能
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory
!insertmacro MUI_PAGE_DIRECTORY
这将调用单击“下一步”按钮时指定的函数。
然后使用验证所选目录所需的逻辑创建LeaveDirectory函数,如果确定目录无效,只需在函数中调用Abort,安装程序将不会继续执行下一步。
该文档位于“自定义函数”部分下的this页面上,但由于您必须展开“页面自定义函数”标题,不幸的是不明显。