Выполнение пакетного файла в установщике NSIS

У меня есть пакетный файл, который мне нужно запустить в моем установщике NSIS. Он должен запускаться после того, как все файлы были извлечены (я полагаю, это очевидно, иначе пакетный файл еще не существует).

Я попытался использовать MUI_PAGE_CUSTOMFUNCTION_PRE с завершающей страницей, чтобы запустить его, но когда он попадает в эту часть script, кажется, что он проскакивает прямо над ним. Вот как я его вызываю.

;;Finish Page
!define MUI_PAGE_CUSTOMFUNCTION_PRE Done
!insertmacro MUI_PAGE_FINISH

Function Done
    ExecWait '"$INSTDIR\BatchFile" "$INSTDIR" "$DATA_FOLDER"'
FunctionEnd

Заранее благодарим за помощь.

UPDATE

Теперь я попытался использовать следующее:

ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C "$INSTDIR\batch.bat" "$INSTDIR" "$DATA_FOLDER"'

Это не сработало, поэтому я вынул /C, чтобы посмотреть, что говорит подсказка cmd (он появляется, но сразу закрывается), и кажется, что он выполняет cmd.exe, но это не так, t выполните оставшуюся часть выполнения.

ОБНОВЛЕНИЕ # 2

Основные знания, которые привели меня к работе, можно найти здесь:

Пакетные файлы Windows:.bat vs .cmd?

По какой-либо причине файлы .bat не согласуются с ExecWait.

В конце:

ExecWait '"$INSTDIR\BatchFile.cmd" "$INSTDIR" "$DATA_FOLDER"'

Работал отлично.

Ответы

Ответ 1

Exec [Wait] нуждается в правильном цитировании:

ExpandEnvStrings $0 %COMSPEC%
ExecWait '"$0" /C "c:\path\to\batch.cmd" "quoted param" normalparam "c:\last param"'

Ответ 2

Я сделал это с помощью расширения exec очень успешно

Это синтаксис:

  SetOutPath $INSTDIR\${APPLICATION_DIR}
    ExpandEnvStrings $0 %COMSPEC%
    nsExec::ExecToStack '"C:\path-tobatch-file\commands.bat"'

Вот ссылка на NSIS Wiki http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt