55

Exec我能知道每个, ExecWait, ExecShell, nsExec::Exec, nsExec::ExecToLog, nsExec::ExecToStack,ExecDos和之间有什么区别ExecCmd,就像什么时候使用 which 一样吗?

我已经发布了我知道的各种执行调用。我正在尝试制作一个全面的列表,以便对未来的访问者有所帮助..

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

  2. ExecWait: 像执行一样执行,Exec但要等到进程退出。

  3. ExecShell:有什么用?

  4. nsExec::Exec: 就像ExecorExecWait但仅适用于命令提示符,而无需打开控制台窗口。我不确定它是否等待进程退出。是否nsExec::Exec等待子进程退出?

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

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

  7. ExecDos: 一样,nsExec::ExecToStack但有额外的(不是吗?)

    一个。接受用作运行应用程序的标准输入的字符串参数。

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

    C。它适用于部分 - 用于 .onInit 签出。

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

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

    部分。我对么?

4

2 回答 2

46

1) 2) 3)

Exec并在内部ExecWait使用CreateProcess并且只能启动程序和批处理文件。

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

4)

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

5)

instfiles 页面上的日志窗口。

7)

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

8)

正确的

于 2012-07-29T14:56:16.550 回答
4

ExecWait等待,因此可以返回东西!文档

ExecShell也能够隐藏输出窗口文档

ExecCmd被认为已过时并被ExecDos. 两者都是 NSIS 的额外插件,默认情况下不提供。文档

于 2015-02-06T12:01:45.543 回答