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

时间:2012-07-29 11:15:56

标签: nsis shellexecute

我可以知道每个ExecExecWaitExecShellnsExec::ExecnsExec::ExecToLog, nsExec::ExecToStack,{{1}之间的区别和} ExecDos一样,何时使用哪个?

我发布了我知道的各种执行电话。我正在努力制作一份全面的清单,以便它可以帮助未来的访客。

  1. ExecCmd:明确执行被调用的字符串,无论是应用程序,控制台还是文件。

  2. Exec:执行ExecWait,但等待进程退出。

  3. Exec它的用途是什么?

  4. ExecShell:就像nsExec::ExecExec一样,但仅限于命令提示符,而且无需打开控制台窗口。我不确定它是否等待进程退出。 ExecWait等待子流程退出吗?

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

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

  7. nsExec:与ExecDos相同,但另外(不是?)

    一个。获取用作运行应用程序的stdin的字符串参数。

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

    ℃。它适用于.onInit checkouts。

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

    ExecDos

    份。 我是否正确?

2 个答案:

答案 0 :(得分:43)

1)2)3)

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

ExecShell使用ShellExecute,这意味着它还可以启动任何已注册的文件类型(.txt .chm等)和网址。如果您启动的程序需要使用UAC升级,也应该使用它。

<强> 4)

nsExec重定向stdout,以便在子进程执行时看不到控制台窗口。是的,等等。

5)

instfiles页面上的日志窗口。

<强> 7)

是的,ExecDos和ExecCmd都是nsExec的更高级版本。

<强> 8)

正确

答案 1 :(得分:3)

ExecWait等待,因此可以返回内容! docs

ExecShell也可以隐藏输出窗口docs

ExecCmd被视为过时且被ExecDos取代。两者都是NSIS的额外插件,默认情况下不提供。 docs