問題原因:工作中,在一個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\nsis.bat" //可以等待 不可以隱藏窗口
2、nsExec::Exec "$INSTDIR\nsis.bat" //可以等待 可以隱藏窗口
3、ExecShell Open "$INSTDIR\nsis.bat" "" SW_HIDE // 不可以等待 可以隱藏窗口
4、ExecCmd::exec "$INSTDIR\nsis.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窗口了。