我正在创建我的第一个NSI脚本,我只是想知道我是否可以从NSIS执行命令行命令或者我应该只执行批处理文件?我真的不知道从哪里开始,其他类似的话题已经过了一点。
答案 0 :(得分:10)
我建议你看看nsExec插件。我最近遇到过需要从NSIS脚本中ping服务器的情况,下面的代码对我来说非常合适。
nsExec::Exec '"C:\Windows\System32\PING.EXE" $URL'
使用nsExec的好处是它可以执行命令而不会在屏幕上弹出dos框。返回值被压入堆栈,并且有几种不同的方法可以访问程序的输出(如果存在)。
我在NSIS网站上找不到关于该插件的大量信息,但以下链接可以帮助您开始正确的方向:
http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt
编辑:
我注意到你特意询问了一个COPY命令,它是一个内部DOS命令,这意味着你将无法执行它,就像我使用ping一样。我可能会弄错,但你不应该使用任何外部程序来执行这样的基本命令。您应该能够使用NSIS命令复制大多数内部命令。
例如,要复制文件(或多个文件),请使用NSIS命令:CopyFiles
NSIS Scripting Reference是你的朋友:)(所以是ctrl + f)
答案 1 :(得分:8)
尝试使用exec
命令http://nsis.sourceforge.net/Docs/Chapter4.html:
4.9.1.2执行
命令
执行指定的程序并立即继续。请注意,指定的文件必须存在于目标系统上,而不是编译系统上。 $OUTDIR
用于工作目录。如果无法启动进程,则会设置错误标志。注意,如果命令可以有空格,则应将其放在引号中以从参数中分隔它。例如:Exec '"$INSTDIR\command.exe" parameters'
。如果你没有把它放在引号中,它将无法在带有或不带参数的Windows 9x上运行。
Exec '"$INSTDIR\someprogram.exe"'
Exec '"$INSTDIR\someprogram.exe" some parameters'
答案 2 :(得分:0)
旧话题,但是仍然很难获得有关如何正确执行此操作的信息。这对我有用:
nsExec::ExecToStack 'cmd /c "clang --version"'
Pop $0
Pop $0
;now you have the output in $0
这将在后台启动命令提示符并执行命令:
clang --version
输出在第二个Pop $ 0之后以$ 0返回。第一个Pop $ 0仅获得退出代码!