Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
我可以知道每个Exec
, ExecWait
, ExecShell
, nsExec::Exec
, nsExec::ExecToLog,
nsExec::ExecToStack
, ExecDos
和ExecCmd
,在何时使用哪个?
我发布了我知道的各种执行调用。 我正在制定一个全面的清单,以便它可以帮助未来的游客..
-
Exec
:简单地执行被调用的string,无论是应用程序,控制台还是文件。 -
ExecWait
:像Exec
一样Exec
但等待进程退出。 -
ExecShell
: 它是什么? -
nsExec::Exec
:与Exec
或ExecWait
但仅用于命令提示符,而不用打开控制台窗口。 我不确定是否等待进程退出。nsExec::Exec
是否等待subprocess退出? -
nsExec::ExecToLog
:The documentation says ExecToLog
类似于普通的nsExec
但是它输出到日志窗口。 这是什么意思,什么是日志窗口? -
nsExec::ExecToStack
:文档说ExecToStack
类似于普通的nsExec
但是它将输出推送到堆栈。 我明白了。 -
ExecDos
:和nsExec::ExecToStack
但是另外( 不是吗?)一个。 以string参数作为运行应用程序的标准input。
湾 在同步/asynchronous模式下工作。
C。 它不适用于.onInit签出。
-
ExecCmd
:与ExecCmd
相同,但不需要这些ExpandEnvStrings $3 %COMSPEC% ExecDos::exec /C
部分。 我对么?
1)2)3)
Exec
和ExecWait
内部使用CreateProcess ,只能启动程序和batch file。
ExecShell
使用ShellExecute ,这意味着它也可以启动任何注册的文件types(.txt .chm等)和URL。 如果您开始的程序需要通过UAC提升,也应该使用它。
4)
nsExecredirect标准输出,因此在执行subprocess时控制台窗口不可见。 是的,它等待。
5)
instfiles页面上的日志窗口。
7)
是的,ExecDos和ExecCmd都是nsExec的更高级版本。
8)
正确
ExecWait
等待,从而可以返回的东西! 文档 。
ExecShell
也可以隐藏输出窗口 。 文档
ExecCmd
被认为是过时的并被ExecDos
取代。 这两个都是额外的NSIS插件,默认情况下不会发货。 文档