Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd

我可以知道每个ExecExecWaitExecShellnsExec::ExecnsExec::ExecToLog, nsExec::ExecToStackExecDosExecCmd ,在何时使用哪个?

我发布了我知道的各种执行调用。 我正在制定一个全面的清单,以便它可以帮助未来的游客..

  1. Exec :简单地执行被调用的string,无论是应用程序,控制台还是文件。

  2. ExecWait :像Exec一样Exec但等待进程退出。

  3. ExecShell它是什么?

  4. nsExec::Exec :与ExecExecWait但仅用于命令提示符,而不用打开控制台窗口。 我不确定是否等待进程退出。 nsExec::Exec是否等待subprocess退出?

  5. nsExec::ExecToLogThe documentation says ExecToLog类似于普通的nsExec但是它输出到日志窗口。 这是什么意思,什么是日志窗口?

  6. nsExec::ExecToStack :文档说ExecToStack类似于普通的nsExec但是它将输出推送到堆栈。 我明白了。

  7. ExecDos :和nsExec::ExecToStack但是另外( 不是吗?)

    一个。 以string参数作为运行应用程序的标准input。

    湾 在同步/asynchronous模式下工作。

    C。 它不适用于.onInit签出。

  8. ExecCmd :与ExecCmd相同,但不需要这些

     ExpandEnvStrings $3 %COMSPEC% ExecDos::exec /C 

    部分。 我对么?

1)2)3)

ExecExecWait内部使用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插件,默认情况下不会发货。 文档

Interesting Posts