在NSIS安装过程中或者安装完成后打开一个应用程序或者文件
使用ExecShell命令
语法:ExecShell action command [parameters] [SW_SHOWDEFAULT | SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_HIDE]
action 通常为 "open" 或者 "print"
command 为要执行的文件,其它都是些可选参数根据自己需要填写。
在vs code中我们看到语法提示,包含了ExecShell 和ExecShellWait,区别在于后者会等待。
下面我们实际测试下几个例子
1、打开文件
我们在文件夹中放了一个test.txt的文本文件,完了编译运行测试是否打开这个文本文件
Unicode true OutFile "ExceShell.exe" Section "main" sec1 ExecShell open "$EXEDIR/test.txt" DetailPrint "使用ExecShell 打开test.txt成功" SectionEnd
编译执行后如下:
运行后确实打开了文件,并且没有等待打开的文件关闭即执行了后面的指令,完成了。
2、打开应用程序
命令修改如下:
; ExecShell open "$EXEDIR/test.txt" ; DetailPrint "使用ExecShell 打开test.txt成功" ExecShell open "D:\Program Files (x86)\NSIS\NSIS.exe" DetailPrint "使用ExecShell 打开NSIS.exe成功"
编译运行后如下:
运行后确实打开了程序,并且没有等待打开的程序关闭即执行了后面的指令,完成了。
通过上面的例子,我们已经可以在安装脚本中打开一个文件或者应用程序,前面都提到了执行完命令后没有等待,而是立即执行了后面的代码,下面我们就来验证下,如何在打开一个应用后等待该应用关闭后再执行后面的代码。
我们再对代码稍作修改,如下所示:
编译运行如下所示:
很明显,安装进度被卡在了这里,没有打印输出后面的内容,当我们关闭打开的NSIS.exe后,安装继续打印了内容并完成。
3、打开url地址
ExecShell "open" "http://nsis.sf.net/"