从NSIS执行命令行命令

从NSIS执行命令行命令,nsis,Nsis,我正在创建我的第一个NSI脚本,我只是想知道我是否可以从NSI执行命令行命令,还是应该执行一个批处理文件?我真的不知道从哪里开始,其他类似的话题也让我有些不知所措。尝试使用exec命令: 4.9.1.2执行 命令 执行指定的程序并立即继续。请注意,指定的文件必须存在于目标系统上,而不是编译系统上$OUTDIR用于工作目录。如果无法启动进程,则设置错误标志。注意,如果命令可以有空格,则应将其放在引号中,以根据参数对其进行分隔。e、 g.:Exec'$INSTDIR\command.exe“参数”。

我正在创建我的第一个NSI脚本,我只是想知道我是否可以从NSI执行命令行命令,还是应该执行一个批处理文件?我真的不知道从哪里开始,其他类似的话题也让我有些不知所措。

尝试使用
exec
命令:

4.9.1.2执行

命令

执行指定的程序并立即继续。请注意,指定的文件必须存在于目标系统上,而不是编译系统上<代码>$OUTDIR用于工作目录。如果无法启动进程,则设置错误标志。注意,如果命令可以有空格,则应将其放在引号中,以根据参数对其进行分隔。e、 g.:
Exec'$INSTDIR\command.exe“参数”
。如果不加引号,无论有无参数,它都无法在Windows 9x上运行

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

我建议大家看看nsExec插件。我最近遇到了一个需要从NSIS脚本内部ping服务器的情况,下面的代码对我来说非常适合

nsExec::Exec '"C:\Windows\System32\PING.EXE" $URL'
使用nsExec的好处是它执行命令时不会在屏幕上弹出dos框。返回值被推送到堆栈上,并且有两种不同的方法可以访问程序的输出(如果存在)

我在NSIS网站上找不到关于该插件的全部信息,但下面的链接应该可以让您从正确的方向开始:

编辑:

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

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


这是您的朋友:)(ctrl+f也是)

我们可以从NSIS启动命令行命令,获取返回值,并在此基础上进一步开发安装逻辑

示例:假设我们需要获得已安装的clang编译器版本。要获得该版本,我们必须发布:

clang --version 
在NSIS中,我们使用以下方法进行此操作:


警告:只有第二个Pop$0得到我们想要的响应,在本例中为clang版本。第一个Pop$0获取退出代码。

可能会有所帮助。它适用于命令行应用程序。好的,我希望能够从.nsi控制命令行,并执行如下操作:“复制/b someprogram.exe+,”听起来我需要从批处理文件中执行此操作。您是否尝试过此
Exec'cmd/k copy/b…“
?如果选择正确的选项来执行应用程序而不显示命令promptCopyFiles,那就太好了,但它似乎有大约264个字符的限制。
     nsExec::ExecToStack  'cmd /c "clang --version"'
     Pop $0
     Pop $0
     ;now we have the version in $0