【发布时间】:2011-03-16 23:03:47
【问题描述】:
我有一个需要在 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 但仅此而已,它没有t 完成其余的执行。
更新 #2
可以在这里找到使我能够使用它的核心知识:
Windows batch files: .bat vs .cmd?
无论出于何种原因,.bat 文件都与 ExecWait 不一致。
最后:
ExecWait '"$INSTDIR\BatchFile.cmd" "$INSTDIR" "$DATA_FOLDER"'
工作得很好。
【问题讨论】:
-
我能够运行 .bat 文件,就像您在上面发布的 cmd 文件一样。您还可以使用 nsExec::Exec 而不是 ExecWait 来禁止显示命令窗口。
标签: batch-file nsis