【问题标题】:Exec vs ExecWait vs ExecShell vs nsExec::Exec vs nsExec::ExecToLog vs nsExec::ExecToStack vs ExecDos vs ExeCmdExec vs ExecWait vs ExecShell vs nsExec::Exec vs nsExec::ExecToLog vs nsExec::ExecToStack vs ExecDos vs ExeCmd
【发布时间】:2012-07-27 08:53:01
【问题描述】:

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

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

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

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

  3. ExecShell它是干什么用的?

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

  5. nsExec::ExecToLog: The 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 
    

    零件。 我说的对吗?

【问题讨论】:

  • 你也可以包含Timeout::ExecTimeout,如果需要太长时间才能完成,需要杀死子进程。
  • @FranciscoR 随意编辑问题并添加它(连同其目的)。我对你提到的那个不太了解。
  • 实际上,每个命令应该做什么的解释属于答案,在问题本身。 “我对么?” = 糟糕的 StackOverflow 问题。我很想将这些位移动到答案中,但已经有一个答案移动会无效。
  • @MooingDuck 问题是,如果我问这样的问题,它很可能会被关闭,因为这个问题看起来过于宽泛且负载过重且没有研究工作。我想展示自己付出的一些努力,同时在一个地方对所有执行命令进行了完整的解释。当然有人可以把它们都作为一个答案,那也很好。

标签: nsis shellexecute


【解决方案1】:

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

    【讨论】:

    • 你说 ExecShell 能够隐藏输出窗口。我一直在尝试在不打开命令窗口的情况下运行批处理文件,但我做不到。 SW_HIDE 和 SW_MINIMIZE 似乎都没有任何效果。
    • 哇……对不起。自从我处理这个问题以来已经有一段时间了。我想调用一个批处理文件总是会显示一个命令窗口。不管你怎么称呼它。这就是批处理文件的作用:在命令窗口中运行。
    • 我发现您可以使用 nsExec::Exec 运行静默批处理文件
    猜你喜欢
    • 2010-10-18
    • 2018-10-06
    • 2014-08-17
    • 2011-09-18
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多