2012-07-29 157 views
38

我能知道什么是每个ExecExecWaitExecShellnsExec::ExecnsExec::ExecToLog,nsExec::ExecToStackExecDosExecCmd之间的差异,在何时使用哪个?Exec的VS ExecWait VS ExecShell VS nsExec :: Exec的VS nsExec :: ExecToLog VS nsExec :: ExecToStack VS ExecDos VS ExeCmd

我发布了我知道的各种执行调用。我试图做一个全面的列表,因此,它有助于未来的游客..

  1. Exec:说白了执行所谓的字符串,是它的一些应用程序,控制台或文件。

  2. ExecWait:执行像Exec,但等待直到过程退出。

  3. ExecShell这是什么?

  4. nsExec::Exec:就像ExecExecWait但仅限于命令提示符,太不打开控制台窗口。我不确定它是否等待流程退出。 nsExec::Exec等待子进程退出吗?

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

  6. nsExec::ExecToStack:文档说ExecToStack类似于普通nsExec但它推动输出到叠加。我明白了。

  7. ExecDos:同nsExec::ExecToStack但另外

    一个(这不是?)。采用字符串参数作为运行应用程序的标准输入。

    b。在同步/异步模式下工作。

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

  8. ExecCmd:同ExecDos但它并不需要这些

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

    部分。 我正确吗?

+1

对于需要杀死子进程的用户,如果需要花费很长时间才能完成,您可能还会包含[Timeout :: ExecTimeout](http://nsis.sourceforge.net/ExecTimeout_plug-in)。 – 2013-10-24 17:28:00

+0

@FranciscoR随意编辑问题并添加它(连同其目的)。我对你提到的那个不太了解。 – nawfal 2013-10-24 18:06:43

+0

实际上,每个命令应该做什么的解释都属于答案,而不是问题本身。 “我对么?” =糟糕的StackOverflow问题。我试图将这些小部分移到答案上,但已经有一个答案,即移动会失效。 – 2014-05-07 00:09:04

回答

36

1)2)3)

ExecExecWait使用CreateProcess内部和只能启动程序和批处理文件。

ExecShell使用ShellExecute这意味着它也可以启动任何注册的文件类型(.txt .chm等)和URL。如果您开始的课程需要通过UAC升级,也应该使用它。

4)

nsExec重定向标准输出,以便子进程执行时在控制台窗口中是不可见的。是的,它等待。

5)

的instfiles页面上的日志窗口。

7)

是的,无论是ExecDos和ExecCmd是nsExec更为先进的版本。

8)

正确

2

ExecWait等待,因此可以回报的东西! docs

ExecShell也能够隐藏输出窗口docs

ExecCmd被认为已过时并被ExecDos所取代。两者都是NSIS的额外插件,默认情况下不会发货。 docs

相关问题