从NSIS执行命令行命令

时间:2012-07-16 18:54:45

标签: nsis

我正在创建我的第一个NSI脚本,我只是想知道我是否可以从NSIS执行命令行命令或者我应该只执行批处理文件?我真的不知道从哪里开始,其他类似的话题已经过了一点。

3 个答案:

答案 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仅获得退出代码!