我能知道每种ExecExecWaitExecShellnsExec::ExecnsExec::ExecToLog, nsExec::ExecToStackExecDosExecCmd之间的区别是什么,何时使用?

我已经发布了我所知道的各种执行调用。我正在尝试列出完整的列表,以帮助将来的访客。

  • Exec:简单地执行调用的字符串,无论是某些应用程序,控制台还是文件。
  • ExecWait:像Exec一样执行,但是要等到进程退出。
  • ExecShell:它是做什么用的?
  • nsExec::Exec:与ExecExecWait一样,但仅用于命令提示符,而且也无需打开控制台窗口。我不确定它是否等待进程退出。 nsExec::Exec是否等待子进程退出?
  • nsExec::ExecToLog:The documentation says ExecToLog与普通nsExec相似,但它输出到日志窗口。 是什么意思,什么是日志窗口?
  • nsExec::ExecToStack:文档说ExecToStack与普通的nsExec相似,但是它将输出推送到堆栈。我明白了。
  • ExecDos:与nsExec::ExecToStack相同,但另外(不是吗?)

    一种。接受用作运行应用程序的stdin的字符串参数。

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

    C。它不起作用-对于.onInit check out 。
  • ExecCmd:与ExecDos相同,但不需要这些
    ExpandEnvStrings $3 %COMSPEC%
    ExecDos::exec  /C
    

    部分。 我正确吗?
  • 最佳答案

    1)2)3)
    ExecExecWait在内部使用CreateProcess,并且只能启动程序和批处理文件。
    ExecShell使用ShellExecute,这意味着它也可以启动任何注册的文件类型(.txt .chm等)和URL。如果您要启动的程序需要使用UAC进行提升,则也应使用它。

    4)

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

    5)

    instfiles页面上的日志窗口。

    7)

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

    8)

    正确

    关于nsis - Exec,ExecWait,ExecShell,nsExec::Exec与nsExec::ExecToLog,nsExec::ExecToStack,ExecDos,ExeCmd,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11708779/

    10-10 18:31