nsi脚本中执行.bat文件要隐藏dos窗口问题

问题原因:工作中,在一个nsi的安装脚本文件中需要安装虚拟摄像头驱动,安装驱动脚本是.bat文件。使用nsi的execwait函数执行.bat文件时会显示dos窗口。但是领导要求不能显示dos窗口。

解决方法一:思路是看看bat脚本命令本身有没有隐藏dos方法。但是没有找到。后来发现可用用.vbs文件调用来隐藏。

创建一个.vbs文件,写入:createobject ("wscript.shell").run "a.bat",1,TRUE。使用.vbs文件来调用bat文件。windows下执行时可以隐藏窗口的。但是发现在nsi脚本无法执行.vbs文件。

所有方法一失败了。

方法二:查看nsi本身带有的exec执行函数。

网上查看到有

1、ExecWait "$INSTDIR sis.bat"                                           //可以等待          不可以隐藏窗口 
2、nsExec::Exec "$INSTDIR sis.bat"                                     //可以等待          可以隐藏窗口
3、ExecShell Open "$INSTDIR sis.bat" "" SW_HIDE             // 不可以等待     可以隐藏窗口
4、ExecCmd::exec "$INSTDIR sis.bat"                                  // 不可以等待     可以隐藏窗口  ( Pop $0、 ExecCmd::wait $0  等待)

我们需要等待bat文件返回,而且要隐藏窗口,那么可以用第二个 nsExec::Exec函数。

nsExec::Exec函数是个nsis的nsExec.dll插件中的方法。所有需要在脚本文件中添加插件。

添加方法是

!addplugindir Plugins //添加nsis程序中附带的插件库目录

nsExec::Exec '${VCAM_INSTALL}'   //执行相关的.bat文件 VCAM_INSTALL是个.bat文件的完整路径变量。

好了,这样就不会显示dos窗口了。

原文地址:https://www.cnblogs.com/lisuyun/p/5526975.html