Как запустить другой установщик NSIS и дождаться его завершения? - PullRequest
3 голосов
/ 07 октября 2010

Я пишу установщик в NSIS, который является своего рода оболочкой для другого установщика, созданного с помощью NSIS. Внутренний установщик не мой. Он создан с помощью BioWare Installer 1.03 (NSIS 2.34).Это может быть как-то сломано, но я не могу его изменить!Что делает мой установщик, так это то, что он просто изменяет некоторые параметры реестра (в противном случае «внутренний» установщик не запустится), затем запускает установщик, затем перезаписывает некоторые файлы и затем восстанавливает предыдущие значения реестра.: Я понятия не имею, как на самом деле ждать, пока "внутренний" установщик завершит работу!Это потому, что установщик сначала распаковывает его содержимое и создает новый процесс, который является настоящим установщиком.И код выполняется, как только заканчивается первый процесс (распаковка).Ожидание имеет решающее значение здесь, потому что мне нужно перезаписать некоторые файлы.

Я прочитал это: http://nsis.sourceforge.net/When_I_use_ExecWait,_it_doesn't_wait,, но я не могу найти переключатели для установщика NSIS.пробовал ExecWait и nsExec :: Exec, но ни один из них не ждет реального установщика, просто чтобы завершить первый процесс.

Ответы [ 2 ]

1 голос
/ 08 октября 2010

Во-первых, я никогда не видел сбоя ExecWait, но он будет ждать только дочерний процесс, а не дочерний процесс этого дочернего процесса.Таким образом, каждый процесс в цепочке должен ждать своего ребенка.Если «средний» процесс нарушен, попробуйте http://nsis.sourceforge.net/ExecWait_and_waiting_for_child_processes_with_Job_Objects

. Для ExecWait дерево будет выглядеть так:

  • NSIS1.exe: ExecWait NSIS2.exe
    • NSIS2.exe: ExecWait RealSetup.exe
      • RealSetup.exe: ...

Ваше описание немного неясно,Вы можете подтвердить, что я понял основную идею?

Если вы не смогли найти переключатели для NSIS, значит, вы не RTFM :)

0 голосов
/ 13 декабря 2017

Нашел этот вопрос, потому что у меня была похожая проблема. В моем установщике NSIS я загружал файл Microsoft Visual Studio exe и пытался сначала установить его (чтобы получить некоторые файлы dll зависимостей). Тем не менее, это никогда не работало:

ExecWait "$TEMP\vcredist_x86.exe"

Он просто пропущен - я подозреваю, что это связано с проблемой дочерних процессов (может быть, установщик MS был интерактивным и попросил пользователя принять лицензию). Я вместо этого набрал ExecShellWait:

ExecWaitShell "open" "$TEMP\vcredist_x86.exe"

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

...