Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
我可以知道每个Exec , ExecWait , ExecShell , nsExec::Exec , nsExec::ExecToLog, nsExec::ExecToStack , ExecDos和ExecCmd ,在何时使用哪个? 
我发布了我知道的各种执行调用。 我正在制定一个全面的清单,以便它可以帮助未来的游客..
- 
Exec:简单地执行被调用的string,无论是应用程序,控制台还是文件。
- 
ExecWait:像Exec一样Exec但等待进程退出。
- 
ExecShell: 它是什么?
- 
nsExec::Exec:与Exec或ExecWait但仅用于命令提示符,而不用打开控制台窗口。 我不确定是否等待进程退出。nsExec::Exec是否等待subprocess退出?
- 
nsExec::ExecToLog:The documentation says ExecToLog类似于普通的nsExec但是它输出到日志窗口。 这是什么意思,什么是日志窗口?
- 
nsExec::ExecToStack:文档说ExecToStack类似于普通的nsExec但是它将输出推送到堆栈。 我明白了。
- 
ExecDos:和nsExec::ExecToStack但是另外( 不是吗?)一个。 以string参数作为运行应用程序的标准input。 湾 在同步/asynchronous模式下工作。 C。 它不适用于.onInit签出。 
- 
ExecCmd:与ExecCmd相同,但不需要这些ExpandEnvStrings $3 %COMSPEC% ExecDos::exec /C部分。 我对么? 
1)2)3)
  Exec和ExecWait内部使用CreateProcess ,只能启动程序和batch file。 
  ExecShell使用ShellExecute ,这意味着它也可以启动任何注册的文件types(.txt .chm等)和URL。 如果您开始的程序需要通过UAC提升,也应该使用它。 
4)
nsExecredirect标准输出,因此在执行subprocess时控制台窗口不可见。 是的,它等待。
5)
instfiles页面上的日志窗口。
7)
是的,ExecDos和ExecCmd都是nsExec的更高级版本。
8)
正确
  ExecWait等待,从而可以返回的东西!  文档 。 
  ExecShell也可以隐藏输出窗口 。  文档 
  ExecCmd被认为是过时的并被ExecDos取代。 这两个都是额外的NSIS插件,默认情况下不会发货。  文档