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