背景:最近在做桌面应用的项目,需要在安装应用过程中拷贝java服务文件到本地,然后调用 bat 脚本命令,将 java 环境变量添加到 windows 上,脚本执行成功。但是在脚本执行的时候,会出现 dos 窗口闪屏问题,下面就是处理 dos 窗口闪屏,隐藏 dos 窗口。
在网上找了很多,应该看到的都有以下答案
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 等待)
根据我们找到的答案,发现第二条可以完美解决我们想要的需求。
接下来就是把 Exec 改成第二条。
;拷贝脚本文件之后,执行java服务脚本文件
Section "appRunJavaServerBat";项目中需要用到的服务文件拷贝区段
; 执行 java bat 脚本文件
;Exec "${SERVERFILEPATH}\java-server\install_java.bat"
nsExec::Exec "${SERVERFILEPATH}\java-server\install_java.bat"
SectionEnd
打包运行我们的项目,发现没有任何效果,这就奇怪了。
后面查找资料发现, nsExec::Exec 函数是 nsis 的 nsExec.dll 插件中的方法,所以需要在脚本中添加插件。
; 引入 nsis 程序中附带的插件库目录,这里可以解决执行 bat 脚本的时候 dos 窗口闪动问题
!addplugindir Plugins
以上,就解决了,我们项目中需要的 dos 闪屏问题。