nsi 脚本中使用 Exec 执行 .bat 文件时 dos 窗口闪动问题

434 阅读1分钟

背景:最近在做桌面应用的项目,需要在安装应用过程中拷贝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    // 不可以等待  可以隐藏窗口
4ExecCmd::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 闪屏问题。