繁体   English   中英

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

[英]NSIS - force user to select a different directory

到目前为止,我已经找到了如何通过读取注册表项来检测以前的软件安装,并测试该目录是否存在。 (两者都在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

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

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

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory
!insertmacro MUI_PAGE_DIRECTORY

这将调用单击“下一步”按钮时指定的函数。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM