在NSIS安装程序中执行批处理文件

时间:2010-07-16 13:12:27

标签: batch-file 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

提前感谢您的帮助。

更新

我现在尝试使用以下内容:

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

这不起作用,所以我拿出/ C看看cmd提示符说的是什么(它弹出,但立即关闭),好像它执行了cmd.exe,但就是这样,它没有'完成执行的其余部分。

更新#2

可以在这里找到导致我开始工作的核心知识:

Windows batch files: .bat vs .cmd?

无论出于何种原因,.bat文件都不同意ExecWait。

最后:

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

工作得很好。

2 个答案:

答案 0 :(得分:7)

执行[等待]需要正确引用:

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

答案 1 :(得分: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