NSIS 使用ExecShell打开文件或者应用程序

在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)NSISNSIS.exe"
DetailPrint "使用ExecShell 打开NSIS.exe成功"

编译运行后如下:

 运行后确实打开了程序,并且没有等待打开的程序关闭即执行了后面的指令,完成了。

 通过上面的例子,我们已经可以在安装脚本中打开一个文件或者应用程序,前面都提到了执行完命令后没有等待,而是立即执行了后面的代码,下面我们就来验证下,如何在打开一个应用后等待该应用关闭后再执行后面的代码。

我们再对代码稍作修改,如下所示:

 编译运行如下所示:

 很明显,安装进度被卡在了这里,没有打印输出后面的内容,当我们关闭打开的NSIS.exe后,安装继续打印了内容并完成。

3、打开url地址

ExecShell "open" "http://nsis.sf.net/"
原文地址:https://www.cnblogs.com/njabsky/p/14056034.html