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 а когда использовать какой?

Я отправил различные вызовы выполнения, которые я знаю. Я пытаюсь составить исчерпывающий список, чтобы он помог будущим посетителям..

  1. Exec: Просто выполнить вызываемую строку, будь то приложение, консоль или файл.

  2. ExecWait: Выполняется как Exec но ждет, пока процесс не завершится.

  3. ExecShell: Для чего это?

  4. nsExec::Exec: Как Exec или же ExecWait но только для командной строки и тоже без открытия окна консоли. Я не уверен, что он ожидает завершения процесса. Есть ли nsExec::Exec ждать завершения дочернего процесса?

  5. nsExec::ExecToLog: The documentation says ExecToLog похож на равнине nsExec но это выводит в окно журнала. Что это значит, что такое окно журнала?

  6. nsExec::ExecToStack: В документации сказано ExecToStack похож на равнине nsExec но это подталкивает вывод в стек. Я понимаю.

  7. ExecDos: Такой же как nsExec::ExecToStack но это дополнительно (не так ли?)

    а. принимает строковый параметр, который служит stdin для запуска приложения.

    б. работает в режиме синхронизации / асинхронности.

    с. это работает вне раздела - для проверок.onInit.

  8. 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)

Правильный

ExecWait ждет и таким образом может вернуть вещи! документы

ExecShell также может скрыть окно вывода. документы

ExecCmd считается устаревшим и заменен ExecDos, оба являются дополнительными плагинами для NSIS, которые не поставляются по умолчанию. документы

Другие вопросы по тегам