我有一个我需要在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"'
工作得很好。
答案 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