NSIS限制文件夹安装

NSIS限制文件夹安装,nsis,Nsis,我有一个正在使用的NSIS安装程序,我需要能够防止安装到“用户错误”文件夹(即$SYSDIR、$WINDIR、$DESKTOP等) 我希望他们能够选择安装路径,但如果他们选择了上面列出的位置,只需禁用“下一步”按钮即可。我到处都找遍了,找不到这个问题的答案 我试图使用此功能,但仍可以安装到桌面: !define MUI_PAGE_CUSTOMFUNCTION_LEAVE MyDirLeave !insertmacro MUI_PAGE_DIRECTORY ... Function MyDirLe

我有一个正在使用的NSIS安装程序,我需要能够防止安装到“用户错误”文件夹(即$SYSDIR、$WINDIR、$DESKTOP等)

我希望他们能够选择安装路径,但如果他们选择了上面列出的位置,只需禁用“下一步”按钮即可。我到处都找遍了,找不到这个问题的答案

我试图使用此功能,但仍可以安装到桌面:

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE MyDirLeave
!insertmacro MUI_PAGE_DIRECTORY
...
Function MyDirLeave
  Push $0
    StrLen $0 $DESKTOP
    StrCpy $0 $INSTDIR $0
    StrCmp $0 $DESKTOP 0 proceed
    MessageBox MB_ICONSTOP|MB_OK \
        "Installation on DESKTOP is not allowed, choose another directory"
    Abort
    proceed:
  Pop $0
FunctionEnd
使用回调函数

编辑:


我正试图让.onVerifyInstDir使用push设置选中目录的检查,然后检查它,但它并没有主动阻止安装到这些文件夹…这正是我所包含的,我需要以其他方式调用abort吗?你的push/pop是毫无意义的(保留$0在这里并不重要)当采取中止路径时,它将错过pop,但如果您真的想灰显您需要使用的按钮,代码仍应工作(我在这台机器上没有NSIS,因此我现在无法真正测试)。在Verifyinstir而不是MUI定义上,我是否要省略MUI路径?你能举一个简单的例子,然后我可以根据需要对它进行扩展,用于我需要取消的目录ui\u PAGE\u CUSTOMFUNCTION\u LEAVE是MUI页面的正常LEAVE函数,“.onVerifyInstDir”(确切名称)是一个特殊的目录页面回调。
Function .onVerifyInstDir
StrLen $0 $Desktop
StrCpy $0 $INSTDIR $0
StrCmp $0 $Desktop 0 PathGood
Abort
PathGood:
FunctionEnd