2010-07-16 5 views
13

У меня есть пакетный файл, который мне нужно запустить в моем установщике NSIS. Он должен запускаться после того, как все файлы были извлечены (я полагаю, это очевидно, иначе пакетный файл еще не существует).Выполнение пакетного файла в установщике 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 

Заранее за вашу помощь.

UPDATE

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

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

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

UPDATE # 2

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

Windows batch files: .bat vs .cmd?

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

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

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

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

+0

Мне удалось запустить .bat fi le, так же, как вы указали выше для cmd-файлов. Вы также можете отключить отображение командного окна с помощью nsExec :: Exec, а не ExecWait. – Ben

ответ

7

Exec [Wait] нуждается в надлежащей

+1

игнорировать все это, см. вопрос о том, что я нашел. – Nedloh

5

Я сделал это с помощью 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

+2

Просто уточнить немного. Пакетные файлы должны запускаться через командный процессор: 'cmd/c batch_file.bat' вместо просто' batch_file.bat'. Можно получить путь к 'cmd' из% COMSPEC%. – atzz

+0

Это отлично работает, однако, есть способ настроить его так, чтобы консоль отображалась во время выполнения командного файла? Пакетный файл выполняет копирование/перемещение прилично большого количества файлов, и я не хочу, чтобы пользователь думал, что он ничего не делает, когда на самом деле это так. – Nedloh

+0

Чтобы отобразить вывод, только прямое Exec отобразит окно Cmd: Exec '"$ 0"/C "C: \ Path-to-batch \ commands.bat"' – DBQ

Смежные вопросы