2012-07-16 443 views
12

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

+0

的【答案在这里(HTTP: //stackoverflow.com/a/10900198/62576)可能会有所帮助。它适用于命令行应用程序。 – 2012-07-16 19:18:04

回答

8

尝试使用exec命令http://nsis.sourceforge.net/Docs/Chapter4.html

4.9.1.2 Exec的

命令

执行指定的程序,并立即继续。请注意,指定的文件必须存在于目标系统上,而不是编译系统中。 $OUTDIR用于工作目录。如果进程无法启动,则会设置错误标志。请注意,如果该命令可能有空格,则应将其放在引号中以便从参数中对其进行分隔。例如:Exec '"$INSTDIR\command.exe" parameters'。如果不将它放在引号中,它将无法在Windows 9x上使用或不使用参数。

Exec '"$INSTDIR\someprogram.exe"' 
Exec '"$INSTDIR\someprogram.exe" some parameters' 
+0

好吧,我希望能够从.nsi控制命令行并执行如下操作:“copy/b someprogram.exe + ,,”听起来像我需要从批处理文件中完成。 – user1457296 2012-07-16 22:18:13

+3

你试过这个'Exec'cmd/k copy/b ...'吗? – zenpoy 2012-07-17 05:25:44

10

我建议看看nsExec插件。我刚刚遇到了一种情况,我需要从NSIS脚本中ping一台服务器,下面的代码对我来说非常合适。

nsExec::Exec '"C:\Windows\System32\PING.EXE" $URL' 

使用nsExec的好处是,它可以在屏幕上弹出一个dos框而不执行任何命令。返回值被压入堆栈,并且有几种不同的方式可以访问程序的输出(如果存在的话)。

没有一大堆关于NSIS网站,我能找到的插件的信息,但下面的链接应该让你在正确的方向开始:

http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt

编辑:

我注意到你特别询问了一个内部DOS命令的COPY命令,这意味着你将无法像执行ping操作那样执行它。我可能会误解,但你不应该使用任何外部程序来执行这样的基本命令。您应该能够使用NSIS命令复制大多数内部命令。

例如,要复制文件(或多个文件)使用NSIS命令:CopyFiles

NSIS Scripting Reference是你的朋友:)(所以是按Ctrl + F)

+0

只是正确的选项来执行应用程序而不显示命令提示符 – 2014-03-20 03:36:41