0

私はこの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 で終了するようにしたいと思います。したがって、ドキュメントによると、行末に/SDコマンドを入れてフラグを立てます。そのように:IDCANCELMessageBox

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これは、この構文では、ユーザー対話モードと同じ構文で分岐されるためです。ただし、どちらも機能していないようです。

フラグの何が問題になっていますか?どうすれば修正できますか? 代わりにジャンプのある構文を使用する必要がありますか?

4

1 に答える 1

1

パラメータの順序は重要だと思います。IDCANCEL次の順序で使用してみてください。

MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "a-message" /SD IDCANCEL IDOK OK IDCANCEL CANCEL
于 2012-11-22T10:36:54.867 に答える