问题
Can I know what are the differences between each Exec, ExecWait, ExecShell, nsExec::Exec, nsExec::ExecToLog, nsExec::ExecToStack, ExecDos and ExecCmd, as in when to use which?
I 've posted the various execute calls I know. I am trying to make a comprehensive list, so that it helps future visitors..
Exec: Plainly execute the called string, be it some application, console or file.ExecWait: Executes likeExecbut waits till the process exits.ExecShell: What is it for?nsExec::Exec: Just likeExecorExecWaitbut only for command prompt and that too without opening the console window. I am unsure if it waits for process to exit. DoesnsExec::Execwait for child process to exit?nsExec::ExecToLog:The documentation says ExecToLogis similar to plainnsExecbut it outputs to log window. What does that mean, what is a log window?nsExec::ExecToStack: The documentation saysExecToStackis similar to plainnsExecbut it pushes output to stack. I get that.ExecDos: Same asnsExec::ExecToStackbut it additionally (Is it not?)a. takes string parameter that serves as stdin for running application.
b. works in both sync/async mode.
c. it works out of section - for .onInit check outs.
ExecCmd: Same asExecDosbut it doesn't require theseExpandEnvStrings $3 %COMSPEC% ExecDos::exec /Cparts. Am I correct?
回答1:
1) 2) 3)
Exec and ExecWait use CreateProcess internally and can only start programs and batch files.
ExecShell uses ShellExecute which means that it can also launch any registered filetype (.txt .chm etc) and URLs. It should also be used if the program you are starting needs to elevate with UAC.
4)
nsExec redirects stdout so a console window is not visible when the child process executes. And yes, it waits.
5)
The log window on the instfiles page.
7)
Yes, both ExecDos and ExecCmd are more advanced versions of nsExec.
8)
Correct
回答2:
ExecWait waits and thus can return stuff! docs.
ExecShell is also able to hide the output window. docs
ExecCmd is considered outdated and superseded by ExecDos. both are extra plugins for NSIS that are not shipped by default. docs
来源:https://stackoverflow.com/questions/11708779/exec-vs-execwait-vs-execshell-vs-nsexecexec-vs-nsexecexectolog-vs-nsexecex