2012-11-22 64 views
0

我有这样的NSIS脚本:NSIS静默安装 -/SD IDCANCEL标志

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

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

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