NSIS静默安装程序 - / SD IDCANCEL标志

时间:2012-11-22 10:17:30

标签: installer install nsis flags silent-installer

我有这个NSIS脚本:

Section "!${SECTION_MAIN}" sectionMainID
    SetOutPath "$INSTDIR"
    whileRuns:
                LockedList::FindProcess "$INSTDIR\bin\${PRODUCT_NAME}.exe"
                Pop $R0
                ${If} $R0 != ``
                      MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "this is running. Please close it first."  IDOK OK IDCANCEL CANCEL 
                      OK:
                         Goto whileMLRuns
                      CANCEL:
                         Abort
                ${EndIf}

我想将其更改为静音模式。在静音模式下,我希望自动消息框以CANCEL结束。所以,根据doc,我放了一个/SD标志,命令IDCANCEL位于MessageBox的行尾。像那样:

Section "!${SECTION_MAIN}" sectionMainID
    SetOutPath "$INSTDIR"
    whileRuns:
                LockedList::FindProcess "$INSTDIR\bin\${PRODUCT_NAME}.exe"
                Pop $R0
                ${If} $R0 != ``
                      MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "this is running. Please close it first."  IDOK OK IDCANCEL CANCEL /SD IDCANCEL
                      OK:
                         Goto whileMLRuns
                      CANCEL:
                         Abort
                ${EndIf}

然而,这是失败的。所以,我把它改成了

Section "!${SECTION_MAIN}" sectionMainID
    SetOutPath "$INSTDIR"
    whileRuns:
                LockedList::FindProcess "$INSTDIR\bin\${PRODUCT_NAME}.exe"
                Pop $R0
                ${If} $R0 != ``
                      MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "this is running. Please close it first."  IDOK OK IDCANCEL CANCEL /SD CANCEL
                      OK:
                         Goto whileMLRuns
                      CANCEL:
                         Abort
                ${EndIf}

现在CANCEL而不是IDCANCEL在同一行。这是因为使用此语法,它使用与用户交互模式中相同的语法进行分支。但是,它似乎也没有起作用。

我的国旗有什么问题,我该如何解决?我应该使用带跳转的语法吗?

1 个答案:

答案 0 :(得分:1)

我认为参数顺序很重要。尝试按以下顺序使用IDCANCEL

MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "a-message" /SD IDCANCEL IDOK OK IDCANCEL CANCEL