Безшумен инсталатор на NSIS - флаг /SD IDCANCEL

Имам този 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}

Бих искал да го променя на безшумен режим. В безшумен режим бих искал кутията за съобщения автоматично да завършва с ОТКАЗ. така че, според документ, сложих флаг /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 в същия ред. Това е така, защото с този синтаксис той е разклонен със същия синтаксис като в режим на взаимодействие с потребителя. Изглежда обаче, че и той не работи.

Какво не е наред с моя флаг, как мога да го поправя? Трябва ли вместо това да използвам синтаксис със скок?


person kiriloff    schedule 22.11.2012    source източник


Отговори (1)


Мисля, че редът на параметрите има значение. Опитайте се да използвате IDCANCEL със следния ред:

MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "a-message" /SD IDCANCEL IDOK OK IDCANCEL CANCEL
person zbynour    schedule 22.11.2012