我有这个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
在同一行。这是因为使用此语法,它使用与用户交互模式中相同的语法进行分支。但是,它似乎也没有起作用。
我的国旗有什么问题,我该如何解决?我应该使用带跳转的语法吗?
答案 0 :(得分:1)
我认为参数顺序很重要。尝试按以下顺序使用IDCANCEL
:
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "a-message" /SD IDCANCEL IDOK OK IDCANCEL CANCEL