Выполнение командного файла в установщике NSIS - PullRequest
15 голосов
/ 16 июля 2010

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

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

;;Finish Page
!define MUI_PAGE_CUSTOMFUNCTION_PRE Done
!insertmacro MUI_PAGE_FINISH

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

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

ОБНОВЛЕНИЕ

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

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

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

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

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

Пакетные файлы Windows: .bat против .cmd?

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

В конце концов:

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

Работает просто отлично.

Ответы [ 2 ]

7 голосов
/ 16 июля 2010

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

ExpandEnvStrings $0 %COMSPEC%
ExecWait '"$0" /C "c:\path\to\batch.cmd" "quoted param" normalparam "c:\last param"'
5 голосов
/ 16 июля 2010

Я сделал это с использованием расширения 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

...