2012-11-22 116 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