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
: Простой вызов вызываемой строки, будь то приложение, консоль или файл.
-
ExecWait
: Выполняется как Exec
, но ждет завершения процесса.
-
ExecShell
: Что это такое?
-
nsExec::Exec
: Также как Exec
или ExecWait
, но только для командной строки, и это тоже без открытия окна консоли. Я не уверен, ждет ли он процесса выхода. Запускает ли nsExec::Exec
дочерний процесс?
-
nsExec::ExecToLog
: The documentation says ExecToLog
похож на обычный nsExec
, но он выводится в окно журнала. Что это значит, что такое окно журнала?
-
nsExec::ExecToStack
: В документации указано, что ExecToStack
похож на обычный nsExec
, но он выталкивает вывод в стек. Я понимаю.
-
ExecDos
: То же, что и nsExec::ExecToStack
, но дополнительно ( Не?)
а. принимает параметр string, который служит в качестве stdin для запуска приложения.
б. работает в режиме sync/async.
с. он работает вне раздела - для проверки .onInit.
-
ExecCmd
: То же, что и ExecDos
, но это не требует этих
ExpandEnvStrings $3 %COMSPEC%
ExecDos::exec /C
части. Правильно ли я?
Ответы
Ответ 1
1) 2) 3)
Exec
и ExecWait
использовать CreateProcess и запускать программы и пакетные файлы.
ExecShell
использует ShellExecute, что означает, что он также может запускать любой зарегистрированный тип файла (.txt.chm и т.д.) и URL-адреса. Он также должен использоваться, если программа, которую вы запускаете, должна поднять с помощью UAC.
4)
nsExec перенаправляет stdout, поэтому окно консоли не отображается, когда выполняется дочерний процесс. И да, он ждет.
5)
Окно журнала на странице instfiles.
7)
Да, и ExecDos, и ExecCmd являются более продвинутыми версиями nsExec.
8)
Правильный
Ответ 2
ExecWait
ждет и, следовательно, может вернуть материал! docs.
ExecShell
также может скрывать окно вывода. docs
ExecCmd
считается устаревшим и заменяется на ExecDos
. оба являются дополнительными плагинами для NSIS, которые по умолчанию не отправляются. docs