Автоматический установщик 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