【问题标题】:NSIS restrict folder installationNSIS 限制文件夹安装
【发布时间】:2013-05-21 20:42:26
【问题描述】:

我有一个正在处理的 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

【问题讨论】:

    标签: nsis


    【解决方案1】:

    使用.onVerifyInstDir 回调函数。

    编辑:

    Function .onVerifyInstDir
    StrLen $0 $Desktop
    StrCpy $0 $INSTDIR $0
    StrCmp $0 $Desktop 0 PathGood
    Abort
    PathGood:
    FunctionEnd
    

    【讨论】:

    • 我试图让 .onVerifyInstDir 使用 push 设置检查选定目录然后检查它,但它并没有主动阻止安装到这些文件夹...
    • 这正是我所包含的,我需要以其他方式调用 abort 吗?
    • 你的 push/pop 相当没有意义(保留 $0 在这里并不重要),当采用中止路径时它会错过 pop,但代码应该仍然有效(我没有 NSIS机器,所以我现在无法真正测试)如果您真的想将按钮变灰,则需要使用 .onVerifyInstDir 而不是 MUI 定义
    • 那么我要不要把 MUI 路径都放在一起?你能举个简单的例子,然后我可以根据需要扩展它以用于我需要驱逐的目录
    • MUI_PAGE_CUSTOMFUNCTION_LEAVE 是 MUI 页面的正常离开函数,“.onVerifyInstDir”(确切名称)是一个特殊的目录页面回调。
    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    相关资源
    最近更新 更多